TradPlus SDK - IOS接入心得

本文详细介绍了如何在Unity和原生iOS环境中接入TradPlus广告SDK,包括后台配置、资源导入、项目设置和代码实现。重点讲述了在Unity中添加iOS SDK的步骤,以及在原生iOS项目中集成SDK的方法,同时提供了错误处理的建议。
摘要由CSDN通过智能技术生成

前言:本文包含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. 导入资源

  1. 将解压得到的**TradPlusSDK 文件夹导入到 Unity中Assets/Plugins目录下,注意:ios版的TradPlusSDK 和Android版的TradPlusSDK **不能同时存在于Unity资源文件夹中
  2. 使用Unity发布Xcode项目,将解压得到的**TradPlusFrameworks 文件夹复制进项目文件夹内,并使用Xcode打开项目。选中 UnityFramework,添加TradPlusFrameworks **,添加的时候勾选Creat groups
  3. 删除不必要的 第三方广告平台的库文件,以下都是第三方平台的库文件

在这里插入图片描述

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. 导入资源

  1. 将解压得到的**TradPlusFrameworks 文件夹复制进项目文件夹内,并使用Xcode打开项目,添加TradPlusFrameworks **,添加的时候勾选Creat groups
  2. 删除不必要的 第三方广告平台的库文件,以下都是第三方平台的库文件

在这里插入图片描述

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构建错误,再次检查 导入资源项目配置这两步是否出错,一般都能解决问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值