TradPlus SDK - IOS接入心得
前言:本文包含Unity接入ios sdk以及原生ios sdk的接入步骤,注意xcode版本的更新
一、后台配置
后台配置参照 TradPlus SDK – Unity-Android接入心得 一文中 后台配置,这里就不做重复赘述了
前置条件:
- Xcode更新9.2或者最新版本
- Unity需要2018.3.4或以上版本
二、TradPlus-Unity-ios SDK 的接入
准备工作:
在Mac上下载最新版本 sdk 并解压,获得 **TradPlusFrameworks 和 TradPlusSDK **两个文件夹 。
1. 导入资源
- 将解压得到的**TradPlusSDK 文件夹导入到 Unity中Assets/Plugins目录下,注意:ios版的TradPlusSDK 和Android版的TradPlusSDK **不能同时存在于Unity资源文件夹中
- 使用Unity发布Xcode项目,将解压得到的**TradPlusFrameworks 文件夹复制进项目文件夹内,并使用Xcode打开项目。选中 UnityFramework,添加TradPlusFrameworks **,添加的时候勾选Creat groups
- 删除不必要的 第三方广告平台的库文件,以下都是第三方平台的库文件
2.项目配置
1. 添加常用系统依赖库
在项目 Build phases/Link Binary with libraries下添加以下依赖库
- libz.tbd- libbz2.tbd- libxml2.tbd- libresolv.9.tbd- libsqlite3.tbd
2. 修改项目设置
1.在 Targets/Build Setting/Linking/Other Linker Flags 中加入ObjC
2. 如果项目需要接入MoPub和KSAdSDK,在 Targets/General中将MoPub.framework和KSAdSDK.framework 设置为Embed & Sign
3.代码实现
经过前两步的操作,接下来就可以快乐的写代码了,Unity-ios的接入不需要额外的编写代码,跟Unity-Android使用同一套代码即可,以杜立特行动的sdk接入为例:
using UnityEngine;
using System;
using System.Collections;public class ADManager : MonoBehaviour, IGameInterface
{public ManagerStatus Status { get; private set; }private Action ADVerifyCallback;private string adUnitId;private int reloadCount;public void SetADCallback(Action callback){ADVerifyCallback = callback;}public void StartUp(){Status = ManagerStatus.Started;/* * TradPlus后台设置 对应广告类型的广告位(非三方广告网络的placementId)* 仅在初始化广告位时调用一次*/reloadCount = 0;adUnitId = "9FBF62A82E85FA5F7C30DC6xxxxxxxxx";Init();}private void Init(){TradPlus.InitializeSdk(adUnitId);TradPlus.LoadRewardedVideoPluginsForAdUnits(adUnitId);LoadAD();SetListener();}public bool IsReady(){return TradPlus.HasRewardedVideo(adUnitId);}public void ShowRewardAd(){TradPlus.ShowRewardedVideoConfirmUWSAd(adUnitId);//自动reload设置为true,有广告直接展示广告,没有可用广告会自动加载广告TradPlus.ShowRewardedVideo(adUnitId);}public void LoadAD(){/* 4.4.0 以上版本支持Autoload** 参数2:自动reload设置true,TradPlus SDK会在两个地方帮你自动加载广告,无需调用load* (1)obj.show()返回false时,此时该广告位下没有可用广告;* (2)广告关闭,OnRewardedVideoDismissedEvent回调监听中** 不传默认false,需要在上述2个地方调用obj.load()方法以保证有广告的填充。*/TradPlus.RequestRewardedVideo(adUnitId, true);}private void SetListener(){//针对广告位下每个广告源的回调监听//广告加载成功TradPlusManager.OnRewardedVideoLoadedEvent += OnRewardedVideoLoadedEvent;//广告加载失败TradPlusManager.OnRewardedVideoFailedEvent += OnRewardedVideoFailedEvent;//广告开始展示TradPlusManager.OnRewardedVideoShownEvent += OnRewardedVideoShownEvent;//广告被点击TradPlusManager.OnRewardedVideoClickedEvent += OnRewardedVideoClickedEvent;//广告被关闭//重新加载广告;自动reload设置为true,无需加载广告TradPlusManager.OnRewardedVideoDismissedEvent += OnRewardedVideoDismissedEvent;//奖励,当视频播放完毕,会进行奖励回调TradPlusManager.OnRewardedVideoReceivedRewardEvent += OnRewardedVideoReceivedRewardEvent;//针对多个广告位加载的结果做一个状态的返回//当isLoadedSucces为false,重新加载广告TradPlusManager.OnRewardedVideoAllLoadedEvent += OnRewardedVideoAllLoadedEvent;}private void OnRewardedVideoLoadedEvent(string str){//Debug.Log("广告加载成功" + str);}private void OnRewardedVideoFailedEvent(string str1,string str2){//Debug.Log("广告加载失败" + str1 + str2);}private void OnRewardedVideoShownEvent(string str1, string str2){//Debug.Log("广告开始展示" + str1 + str2);}private void OnRewardedVideoClickedEvent(string str){//Debug.Log("广告点击" + str);}private void OnRewardedVideoDismissedEvent(string str){//Debug.Log("重新加载广告" + str);}private void OnRewardedVideoReceivedRewardEvent(string str1, string str2, int num){//Debug.Log("广告播放完毕");ADVerifyCallback.Invoke();}private void OnRewardedVideoAllLoadedEvent(bool result,string str){//设置了自动加载广告视频,当所有广告位加载失败时,允许3次重新加载,间隔25秒if (false == result){if (reloadCount < 3){StartCoroutine(ReloadAD());++reloadCount;}else{//Debug.Log("广告加载失败!");}}else{reloadCount = 0;}}private IEnumerator ReloadAD(){yield return new WaitForSeconds(25.0f);//Debug.Log("重新加载广告源");LoadAD();}
}
三、TradPlus-原生ios SDK 的接入
准备工作:
在Mac上下载最新版本 sdk 并解压,获得 **TradPlusFrameworks **文件夹 。
1. 导入资源
- 将解压得到的**TradPlusFrameworks 文件夹复制进项目文件夹内,并使用Xcode打开项目,添加TradPlusFrameworks **,添加的时候勾选Creat groups
- 删除不必要的 第三方广告平台的库文件,以下都是第三方平台的库文件
2. 项目配置
参照 TradPlus-Unity-ios SDK 的接入 中的项目配置
3.代码实现
原谅本人比较菜,不会Objective-C,就简单的贴一下代码吧
1. 头文件 tradplus_sdk_manager.h
#import <UIKit/UIKit.h>@interface TradplusSdkManager : UIViewController
+(TradplusSdkManager *) GetInterface;
-(void) LoadRewardAD;
-(void) ShowRewardAD;
-(int) GetAdCount;
-(NSString *) GetSlotId;
@end
2. tradplus_sdk_manager.mm
#import "tradplus_sdk_manager.h"
#import <TradPlusAds/MsRewardedVideoAd.h>
#import <TradPlusAds/MsSDKUtils.h>
#import "IosAdsHelper.h"@interface TradplusSdkManager ()<MsRewardedVideoAdDelegate>//相关回调时可以访问到的具体渠道信息。
@property (nonatomic, strong) NSMutableDictionary *dicChannelInfo;@property (strong, nonatomic) MsRewardedVideoAd *rewardedVideoAd;-(void) Init;- (void)rewardedVideoAdAllLoaded:(MsRewardedVideoAd *)rewardedVideoAd readyCount:(int)readyCount;
- (void)rewardedVideoAdLoaded:(MsRewardedVideoAd *)rewardedVideoAd;
- (void)rewardedVideoAd:(MsRewardedVideoAd *)rewardedVideoAd didFailWithError:(NSError *)error;
- (void)rewardedVideoAdShown:(MsRewardedVideoAd *)rewardedVideoAd;
- (void)rewardedVideoAdClicked:(MsRewardedVideoAd *)rewardedVideoAd;
- (void)rewardedVideoAdDismissed:(MsRewardedVideoAd *)rewardedVideoAd;
- (void)rewardedVideoAdShouldReward:(MsRewardedVideoAd *)rewardedVideoAd reward:(MSRewardedVideoReward *)reward;
@end@implementation TradplusSdkManager:UIViewController
static TradplusSdkManager* _instance = nil;
+(TradplusSdkManager *)GetInterface
{if (nil == _instance) {_instance = [TradplusSdkManager new];[_instance Init];}return _instance;
}-(void) Init
{[MsSDKUtils msSDKInit:^(NSError *error){if (!error){NSLog(@"tradplus SDK 初始化成功!");}}];self.rewardedVideoAd = [[MsRewardedVideoAd alloc] init];//如果使用穿山甲广告,并且是非模版渲染(穿山甲海外只支持非渲染),需要在调用setAdUnitID方法之前手动设置如下:self.rewardedVideoAd.isPangleTemplateRender = NO;//如需自动reload,可调用setAdUnitID:isAutoLoad:方法[self.rewardedVideoAd setAdUnitID:@"344B8096EE4B760D86F9F8558722C396" isAutoLoad:true];self.rewardedVideoAd.delegate = self;
}
-(int)GetAdCount
{return self.rewardedVideoAd.readyAdCount;
}+(void) LoadFinish{IosAdsHelper* _iosAdHelper = IosAdsHelper::GetInsterface();_iosAdHelper->OnAdloaded();
}-(void) LoadRewardAD
{NSLog(@"广告开始加载 %s", __FUNCTION__);int count = [self GetAdCount];if(0<count){[TradplusSdkManager LoadFinish];}else{[self.rewardedVideoAd loadAd];}}-(void) ShowRewardAD
{if (self.rewardedVideoAd && [self.rewardedVideoAd isAdReadyWithDirection]){NSLog(@"显示广告!");UIWindow *window = [[[UIApplication sharedApplication] windows] objectAtIndex:0];UIViewController *rootViewController = window.rootViewController;[self.rewardedVideoAd showAdWithDirectionFromRootViewController:rootViewController];}else{NSLog(@"没有广告!执行加载!");[self.rewardedVideoAd loadAd];}
}-(NSString *) GetSlotId
{return [self.rewardedVideoAd.dicChannelInfo objectForKey:@"placementid"];
}//load 完成
- (void)rewardedVideoAdAllLoaded:(MsRewardedVideoAd *)rewardedVideoAd readyCount:(int)readyCount
{if (readyCount > 0){//加载成功,有可供展示的插屏广告。NSLog(@"广告源加成功 %d %s", readyCount, __FUNCTION__);[TradplusSdkManager LoadFinish];}else {//加载失败,TradPlus后台对应广告位设置的所有三方广告源,全部加载失败,程序启动后第一次加载失败时建议隔30秒重新加载一次。如果设置了自动reload,此处不用处理。NSLog(@"所有广告源加载失败 %s", __FUNCTION__);[self LoadRewardAD];}
}
//单个广告源加载成功
-(void)rewardedVideoAdLoaded:(MsRewardedVideoAd *)rewardedVideoAd
{NSLog(@"单个广告源加载成功! %s", __FUNCTION__);[TradplusSdkManager LoadFinish];
}
//单个广告源加载失败
-(void)rewardedVideoAd:(MsRewardedVideoAd *)rewardedVideoAd didFailWithError:(NSError *)error
{NSLog(@"%s->%@", __FUNCTION__, error);
}
//开始播放视频后回调
-(void)rewardedVideoAdShown:(MsRewardedVideoAd *)rewardedVideoAd
{NSLog(@"广告开始播放 %s", __FUNCTION__);
}
//视频播放结束后,关闭落地页
-(void)rewardedVideoAdDismissed:(MsRewardedVideoAd *)rewardedVideoAd
{//dismiss后重新请求广告,如果是自动加载可不调用。[self LoadRewardAD];NSLog(@"广告关闭 %s", __FUNCTION__);IosAdsHelper* _iosAdHelper = IosAdsHelper::GetInsterface();_iosAdHelper->AdsShowCallBackEvent(-1);
}
//点击广告后回调。
-(void)rewardedVideoAdClicked:(MsRewardedVideoAd *)rewardedVideoAd
{NSLog(@"点击了广告 %s", __FUNCTION__);
}
//播放完成获得奖励后回调 reward为TradPlus后台设置的奖励 通过reward.currencyType reward.amount访问
-(void)rewardedVideoAdShouldReward:(MsRewardedVideoAd *)rewardedVideoAd reward:(MSRewardedVideoReward *)reward
{NSLog(@"广告播放完成 获得奖励 %s", __FUNCTION__);self.dicChannelInfo = rewardedVideoAd.dicChannelInfo;IosAdsHelper* _iosAdHelper = IosAdsHelper::GetInsterface();_iosAdHelper->AdsShowCallBackEvent(0); //广告播放完成,获得奖励
}
@end
3. 如果想获取广告加载的信息,可以通过
[self.rewardedVideoAd.dicChannelInfo objectForKey:@“信息字段”];
其中信息字段可以替换为以下单词
- iso 国家两位简码
- appkey mintegral除了appid之外还提供了appkey
- appid 三方广告源 标识应用唯一标识的appid/appkey/sdkkey等
- placementid 对应三方placement id,zone id等
- unitid mintegral 单个广告位placement id下面还分unit id
- load_time 加载时长,单位毫秒
- is_play_complete 是否播放完成
四、常见错误及解决办法
如果出现Xcode构建错误,再次检查 导入资源和项目配置这两步是否出错,一般都能解决问题
TradPlus SDK - IOS接入心得相关推荐
- Android和iOS接入Appsflyer SDK
Android接入 1.添加repositories // ... repositories {// ...mavenCentral() } // ... 2.添加dependencies depen ...
- cocos creator接入微信登陆sdk ios篇
cocos creator接入微信登陆sdk ios篇 背景已经在Android篇里面交代过了,有兴趣的朋友可以再看看Android篇 步骤 去微信开放平台下载ios平台所需要的sdk 在" ...
- Unity接入微信SDK——iOS(接入微信SDK)
Unity接入微信SDK--iOS(一 接入微信SDK) 下载微信SDK 下载地址:微信开放平台 导出Unity Xcode项目 导出Unity Xcode项目,并打开 微信SDK导入Xcode项目 ...
- IOS接入百度地图SDK,百度定位SDK记录
地图显示 Xcode新建一个项目,我取名叫BaiduMapIOSAgain,包名为com.unity.BaiduMapIOSAgain. 在百度SDK的控制台创建应用,过程略,跟着官方说明即可 首先先 ...
- unity google admob ios 接入 聚合激励广告适配器
下面说下躺坑 主要是接入google admob 聚合激励广告适配器 ,开启facebook ,unity,admob 广告 使用sdk框架接入 sdk下载地址:https://developers. ...
- CodeSign error: code signing is required for product type Application in SDK iOS XXX的解决办法
转自:http://www.tuicool.com/articles/jYRNbm 在真机测试的时候往往会突然出现这样一个错误,code signing is required for product ...
- CodeSign error: code signing is required for product type Application in SDK iOS
在真机测试的时候往往会突然出现这样一个错误,code signing is required for product type 'Application' in SDK 'iOS 7.0' ,就是说 ...
- 如何解决 错误code signing is required for product type 'xxxxx' in SDK 'iOS 8.2'
如何解决 错误code signing is required for product type 'xxxxx' in SDK 'iOS 8.2' 大家在做真机调试的时候,或许会遇到这样的问题,那如何 ...
- 短视频直播美颜sdk可以接入其它视频社交平台吗?
近期,小编调研了市场上美颜sdk的使用情况,根据使用频率来看,短视频.直播类型的视频社交平台的使用频率是最高的,甚至超过了其它平台的总和.例如短视频平台,大家应该非常了解,毕竟它就是以各种卡点.趣味拍 ...
最新文章
- FTP匿名访问修复方法
- php 常用设计模式demo
- 02.改善深层神经网络:超参数调试、正则化以及优化 W3. 超参数调试、Batch Norm和程序框架
- 最近自学 Asp.net MVC 小总结
- 比特币市值占比达到年内高点
- Atitit 图像处理 halcon类库的使用 范例边缘检测 attilax总结
- [Swift]LeetCode528. 按权重随机选择 | Random Pick with Weight
- 苹果为什么不能开无线网络连接服务器,苹果手机不能上网怎么办 iPhone网络故障解决【详解】...
- php创建多级栏目_PHP 实现无限极栏目分类
- opencv 风挡轮廓补全
- Python _多文件入表中的记录
- BJFU 1399 警察抓小偷
- mysql根据表的一个字段决定去关联(join)那张表格
- 《大型网站技术架构:核心原理与案例分析》之读后小结
- dotnet core 2.1 使用阶梯编译
- libgdx教程_使用libgdx进行Android游戏开发–一天中的原型,第1a部分
- freertos与linux区别,μClinux、μC/OS-II、eCos、FreeRTOS和djyos操作系统的特点及不足-嵌入式系统-与非网...
- 运营方案要包括哪些内容_施工招标项目技术方案编制的内容包括哪些?
- mmdetection/mmdetection3d多机多卡训练
- stm32毕业设计 智能小车 自动泊车系统