下面说下躺坑
主要是接入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回调的方法
      }
      

打完收工

更多推荐