unity google admob ios 接入 聚合激励广告适配器
下面说下躺坑
主要是接入google admob 聚合激励广告适配器 ,开启facebook ,unity,admob 广告
使用sdk框架接入
sdk下载地址:https://developers.google.com/admob/ios/download
1:导入主要的库
GoogleMobileAds.framework
GoogleAppMeasurement.framework
GoogleUtilities.framework
nanopb.framework
对应聚合各个平台sdk 地址:https://developers.google.com/admob/ios/mediate
2:导入facebook主要的库*(注意2个framework版本要对起来)*
FBAudienceNetwork.framework
地址:https://developers.facebook.com/docs/audience-network/guides/adding-sdk/ios
FacebookAdapter.framework
地址:https://bintray.com/google/mobile-ads-adapters-ios/FacebookAdapter
地址:https://google.bintray.com/mobile-ads-adapters-ios/
3:导入unity主要库*(注意2个framework版本要对起来)*
UnityAds.framework
地址:https://github.com/Unity-Technologies/unity-ads-ios/releases
UnityAdapter.framework
地址:https://google.bintray.com/mobile-ads-adapters-ios/
4:导入库到工程
需要添加本地库: libxml2.2.tbd 和 javaScriptCore.framework,(不然编译错误)
添加info里面的GADIsAdManagerApp 为 YES (不然闪退)
修改info里面的GADApplicationidentifier 为 ca-app-pub-0000000000000000~00000000 (后台自己找)
5:发现导入库UnityAdapter.framework ,FacebookAdapter.framework存在格式问题
(IOS中Xcode framework无法识别headers目录问题)
解决方案:
将***_SDK.framework/Versions/A/ 下的Headers和SDK文件
移动到***_SDK.framework目录下,
将其他文件删除,重新编译即可。
6:添加代码走起
admon.h
#import <Foundation/Foundation.h>
@interface AdMob : NSObject
typedef void (^LoadHandler)(BOOL succeeded, NSError* error);
typedef void (^OpenedHandler)();
typedef void (^StartedHandler)();
typedef void (^ClosedHandler)();
typedef void (^RewardedHandler)(NSString *type, int amount);
+ (AdMob *)sharedInstance;
- (void) init;
- (void) load:(NSString *)adFormat withAdUnitID:(NSString *)adUnitId withCompleted:(LoadHandler)callback;
- (BOOL) isLoaded:(NSString *)adFormat;
- (void) show:(NSString *)adFormat withAdUnitID:(NSString *)adUnitId onOpened:(OpenedHandler)openedCallback onStarted:(StartedHandler)startedCallback onClosed:(ClosedHandler)closedCallback onRewarded:(RewardedHandler)rewardedCallback;
@end
admon.mm
#import "AdMob.h"
#import <Foundation/Foundation.h>
#import <GoogleMobileAds/GoogleMobileAds.h>
#import "PluginHelper.h"
#import "UnityAppController.h"
#import "UnityInterface.h"
@interface AdMob() <GADRewardedAdDelegate>
@property (nonatomic, strong) LoadHandler _loadCallback;
@property (nonatomic, strong) OpenedHandler _openedCallback;
@property (nonatomic, strong) StartedHandler _startedCallback;
@property (nonatomic, strong) ClosedHandler _closedCallback;
@property (nonatomic, strong) RewardedHandler _rewardedCallback;
@property (nonatomic, strong) GADRewardedAd *rewardedAd;
@end
@implementation AdMob
+ (UIViewController *)unityGLViewController {
UnityAppController *applicationDelegate = [UIApplication sharedApplication].delegate;
return applicationDelegate.rootViewController;
}
+ (AdMob *)sharedInstance
{
static AdMob *_instance = nil;
if (_instance == nil)
{
_instance = [[AdMob alloc] init];
}
return _instance;
}
- (void) init
{
[[GADMobileAds sharedInstance] startWithCompletionHandler:NULL];
}
- (void) load:(NSString *)adFormat withAdUnitID:(NSString*)adUnitId withCompleted:(LoadHandler)callback
{
self.rewardedAd = [[GADRewardedAd alloc] initWithAdUnitID:adUnitId];
GADRequest *request = [GADRequest request];
[self.rewardedAd loadRequest:request completionHandler:^(GADRequestError * _Nullable error) {
if(error)
{
callback(false, error);
}
else
{
callback(true, NULL);
}
}];
}
- (BOOL) isLoaded:(NSString *)adFormat
{
return self.rewardedAd.isReady;
}
- (void) show:(NSString *)adFormat withAdUnitID:(NSString*)adUnitId onOpened:(OpenedHandler)openedCallback onStarted:(StartedHandler)startedCallback onClosed:(ClosedHandler)closedCallback onRewarded:(RewardedHandler)rewardedCallback
{
self._openedCallback = openedCallback;
self._startedCallback = startedCallback;
self._closedCallback = closedCallback;
self._rewardedCallback = rewardedCallback;
if(self.rewardedAd.isReady)
{
UIViewController *unityController = [AdMob unityGLViewController];
[self.rewardedAd presentFromRootViewController:unityController delegate:self];
}
else
{
if (self._startedCallback != nil) {
self._startedCallback();
}
}
}
-(void) rewardedAd:(GADRewardedAd *)rewardedAd userDidEarnReward:(GADAdReward *)reward
{
if (self._rewardedCallback != nil) {
self._rewardedCallback(reward.type, 0);
}
}
-(void) rewardedAdDidPresent:(GADRewardedAd *)rewardedAd
{
if (self._openedCallback != nil) {
self._openedCallback();
}
}
-(void) rewardedAd:(GADRewardedAd *)rewardedAd didFailToPresentWithError:(NSError *)error
{
if (self._startedCallback != nil) {
self._startedCallback();
}
}
-(void) rewardedAdDidDismiss:(GADRewardedAd *)rewardedAd
{
if (self._closedCallback != nil) {
self._closedCallback();
}
}
@end
admobmanager.mm 这个用来开放接口给unityC#调用的
#import <Foundation/Foundation.h>
#import "PluginHelper.h"
#import "AdMob.h"
extern void UnitySendMessage(const char *, const char *, const char *);
char *adMobGameObjectName = NULL;
static void AdMobSendMessage(NSString *callback, NSString *message)
{
if (adMobGameObjectName == nil) {
return;
}
if (callback == nil) {
return;
}
UnitySendMessage(adMobGameObjectName, [callback UTF8String], [PluginHelper MakeStringCopy:[message UTF8String]]);
}
extern "C"
{
void _SDKAdMob_RegisterCallback(const char *gameObjectName)
{
adMobGameObjectName = [PluginHelper MakeStringCopy:gameObjectName];
}
void _SDKAdMob_Init()
{
[[AdMob sharedInstance] init];
}
void _SDKAdMob_Load(const char *adFormat, const char *adUnitId)
{
NSString *adUnitIdTemp = [PluginHelper UTFString2NSString:adUnitId];
NSMutableDictionary *retParameters = [[[NSMutableDictionary alloc] initWithCapacity:1] autorelease];
[[AdMob sharedInstance] load:[PluginHelper UTFString2NSString:adFormat] withAdUnitID:[PluginHelper UTFString2NSString:adUnitId] withCompleted:^(BOOL succeeded, NSError *error) {
if (succeeded) {
[retParameters setObject:adUnitIdTemp forKey:@"adUnitId"];
NSString* strParameters = [PluginHelper convertToJSONData:retParameters];
AdMobSendMessage(@"OnAdLoaded", strParameters);
} else {
NSString *errorString = @"Unkhown Error";
if ([error localizedDescription] != nil) {
errorString = [error localizedDescription];
} else if ([error localizedFailureReason] != nil) {
errorString = [error localizedFailureReason];
}
[retParameters setObject:adUnitIdTemp forKey:@"adUnitId"];
[retParameters setObject:@"" forKey:@"errorCode"];
[retParameters setObject:errorString forKey:@"errorReason"];
NSString* strParameters = [PluginHelper convertToJSONData:retParameters];
AdMobSendMessage(@"OnAdFailedToLoad", strParameters);
}
}];
}
bool _SDKAdMob_IsLoaded(const char *adFormat, const char *adUnitId)
{
return [[AdMob sharedInstance] isLoaded:[PluginHelper UTFString2NSString:adFormat]];
}
void _SDKAdMob_Show(const char *adFormat, const char *adUnitId)
{
NSString *adUnitIdTemp = [PluginHelper UTFString2NSString:adUnitId];
NSMutableDictionary *retParameters = [[[NSMutableDictionary alloc] initWithCapacity:1] autorelease];
[retParameters setObject:adUnitIdTemp forKey:@"adUnitId"];
[[AdMob sharedInstance] show:[PluginHelper UTFString2NSString:adFormat] withAdUnitID:[PluginHelper UTFString2NSString:adUnitId]
onOpened:^ {
NSLog(@"--------------------------OnAdOpened");
NSString* strParameters = [PluginHelper convertToJSONData:retParameters];
AdMobSendMessage(@"OnAdOpened", strParameters);
}
onStarted:^ {
NSLog(@"--------------------------OnAdFailedToShow");
NSString* strParameters = [PluginHelper convertToJSONData:retParameters];
AdMobSendMessage(@"OnAdFailedToShow", strParameters);
}
onClosed:^ {
NSLog(@"--------------------------OnAdClosed");
NSString* strParameters = [PluginHelper convertToJSONData:retParameters];
AdMobSendMessage(@"OnAdClosed", strParameters);
}
onRewarded:^(NSString *type, int amount) {
NSLog(@"--------------------------OnAdMobRewarded");
[retParameters setObject:type forKey:@"type"];
[retParameters setObject:[NSString stringWithFormat:@"%d", amount] forKey:@"amount"];
NSString* strParameters = [PluginHelper convertToJSONData:retParameters];
AdMobSendMessage(@"OnAdMobRewarded", strParameters);
}];
}
}
unity C# 调用代码
#if UNITY_IOS && !UNITY_EDITOR
[DllImport("__Internal")]
private static extern void _SDKAdMob_RegisterCallback(string gameObjectName);
[DllImport("__Internal")]
private static extern void _SDKAdMob_Init();
[DllImport("__Internal")]
private static extern void _SDKAdMob_Load(string adFormat, string adUnitId);
[DllImport("__Internal")]
private static extern bool _SDKAdMob_IsLoaded(string adFormat, string adUnitId);
[DllImport("__Internal")]
private static extern void _SDKAdMob_Show(string adFormat,string adUnitId);
#endif
string GetCallbackAdUnitId(string strJson) //用来解析ios返回的jsom解析adUnitId
{
string adUnitId = string.Empty;
try
{
Dictionary<string, object> parameters = Json.Deserialize(strJson) as Dictionary<string, object>;
if (parameters != null)
{
object data = null;
if (parameters.TryGetValue("adUnitId", out data))
{
adUnitId = data.ToString();
}
}
}
catch (Exception e)
{
}
return adUnitId;
}
void OnAdLoaded(string strJson)
{
//ios回调的方法
}
void OnAdFailedToLoad(string strJson)
{
//ios回调的方法
}
void OnAdOpened(string strJson)
{
//ios回调的方法
}
void OnAdFailedToShow(string strJson)
{
//ios回调的方法
}
void OnAdClosed(string strJson)
{
//ios回调的方法
}
void OnAdMobRewarded(string strJson)
{
//ios回调的方法
}
打完收工
更多推荐


所有评论(0)