Unity SDK 相关总结

此文档用于记录Unity SDK 更新流程,并记录了遇到的问题以及解决方案。

由于大多数广告SDK是基于Admob的中介SDK,所它们以单独算一类。

一、通用SDK步骤

  1. 从官网或 GitHub下载最新.unitypackage 版本。
  2. .unitypackage通过选择 Unity 菜单选项 Assets > Import package > Custom Package导入文件。
  3. 选择导入的项目,需要注意的是ExternalDependencyManager(外部依赖管理器)的版本,比现有版本低时需要去掉勾选。
  4. 对比查看Assets/{SDKName}/Editor/xxxDependencies.xml的修改
    xxxDependencies.xml决定了最终导入的Android/iOS依赖库版本号,里面可能有着特殊修改,比如Firebase的分析库Firebase/Analytics在iOS上需要改为分支版本Firebase/AnalyticsWithoutAdIdSupport
  5. Android SDK 需要在导出工程前点击选择“Assets”>“External Dependency Manager”>“Android Resolver”>“Resolve”让 Unity 外部依赖管理器库将声明的依赖项复制到Assets/Plugins/Android 目录或更新在gradle文件中。
  • Android依赖库版本会更新到Assets/Plugins/Android/mainTemplate.gradle文件中
  • iOS依赖库版本会在导出时更新到导出工程目录的Podfile文件中
  1. 其他注意事项,在SDK部分单独介绍
  2. 打包测试

二、Google广告SDK

由于谷歌SDK中文版本SDK要落后与英文版本,请在下载时切换语言为英文才能看到真正最新版SDK。

1.Admob

Admob SDK Google 移动广告 Unity 插件,让 Unity 开发人员可以在 Android 和 iOS 应用程序上投放 Google 移动广告,而无需编写 Java 或 Objective-C 代码。该插件提供了一个 C# 接口,用于请求 Unity 项目中的 C# 脚本使用的广告。

1️⃣ SDK 接入或更新

参考通用步骤

2️⃣注意事项

2.AppLovin Mediation

1️⃣ SDK 接入或更新

  1. 参考通用步骤
  2. 打开AppLovin Unity Mediation Plugin Changelog下Android/iOS版本链接,查看支持的最新版本情况,并与官网版本对比。一般小版本是bug修复,用最新的即可,大版本要看官网changelog再决定是否提升。

2️⃣注意事项

参考其他问题iOS 2-3解决方案,ios需要添加addToAllTargets="true"

2024.04.20

  • iOS默认版本为AppLovin iOS adapter version 12.2.1.0,实际最新为12.4.1.0。查看官方changelog可知12.4.1修复了隐私清单的一个bug,所以必须将默认版本更新到12.4.1.此时使用的iOS Google Mobile Ads SDK version是 11.3.0,因此必须将Assets/GoogleMobileAds/Editor/GoogleMobileAdsDependencies.xml 中iosPods版本11.2.0 > 11.3.0
  • Android默认版本为Android adapter version 12.3.0.0.实际最新为12.4.2.0。为了同iOS版本逻辑,也要更到12.4.2.0

3.Chartboost Mediation

1️⃣ SDK 接入或更新

  1. 参考通用步骤
  2. 打开Chartboost Unity Mediation Plugin Changelog下Android/iOS版本链接,查看支持的最新版本情况,并与官网版本对比。一般小版本是bug修复,用最新的即可,大版本要看官网changelog再决定是否提升

2️⃣注意事项

错误码
Android & Amazon SDK Errors ��

Error

Description

INTERNAL(0)

Fires when you enter for your named location string. Learnmoreaboutnamedlocations ▶NULL

INTERNET_UNAVAILABLE(1)

Fires when there is no internet connection on the test device. Troubleshoot possible device network connection issues.

NETWORK_FAILURE(5)

Fires when a network request fails for any reason. Check your network settings and make sure your device is connected to the internet. If you still experience this error, please send Charles Web Proxy logs of the event to oursupportteam.

NO_AD_FOUND(6)

Fires when our ad server hasn’t found an appropriate ad to deliver to the device. This could be due to location, campaign filters, fill rate, or other factors. Trytroubleshootinghere ▶

SESSION_NOT_STARTED(7)

A valid Chartboost session has not been detected. Check that your appIDandappsignature are correct and that you are properly initializing Chartboost with Chartboost.startWithAppId(this, appId, appSignature);

SERVER_ERROR(8)

 

ASSET_DOWNLOAD_FAILURE(16)

Error downloading assets from Chartboost Server. Troubleshoot your internet connection, double-check proxies, and try again. If possible, send Charles Web Proxy logs of the event to oursupportteam.

BANNER_DISABLED(36)

 

BANNER_VIEW_IS_DETACHED(37)

 

4.DTExchange(FyberMediation

1️⃣ SDK 接入或更新

  1. 参考通用步骤
  2. 打开DTExchange(Fyber) Unity Mediation Plugin Changelog下Android/iOS版本链接,查看支持的最新版本情况,并与官网版本对比。一般小版本是bug修复,用最新的即可,大版本要看官网changelog再决定是否提升

2️⃣注意事项

参考其他问题iOS 2-3解决方案,ios需要添加addToAllTargets="true"

2024.04.20

5.InMobi Mediation

1️⃣ SDK 接入或更新

  1. 参考通用步骤
  2. 打开InMobi Unity Mediation Plugin Changelog下Android/iOS版本链接,查看支持的最新版本情况,并与官网版本对比。一般小版本是bug修复,用最新的即可,大版本要看官网changelog再决定是否提升

2️⃣注意事项

6.IronSource Mediation

1️⃣ SDK 接入或更新

  1. 参考通用步骤
  2. 打开IronSource Unity Mediation Plugin Changelog下Android/iOS版本链接,查看支持的最新版本情况,并与官网版本对比。一般小版本是bug修复,用最新的即可,大版本要看官网changelog再决定是否提升

2️⃣注意事项

2024.04.20

  • 目前来看官网虽然有了8.0版本,但是google广告中介最新的7.9.1已经适配了苹果隐私,大版本升级可能有api变化以及新的bug,因此采用7.9.1

7.LiftoffMonetize(vungleMediation

1️⃣ SDK 接入或更新

  1. 参考通用步骤
  2. 打开LiftoffMonetize(vungle) Unity Mediation Plugin Changelog下Android/iOS版本链接,查看支持的最新版本情况,并与官网版本对比。一般小版本是bug修复,用最新的即可,大版本要看官网iOS changelog以及Android changelog再决定是否提升

2️⃣注意事项

2024.04.20

8.MetaAudienceNetwork(FacebookMediation

1️⃣ SDK 接入或更新

  1. 参考通用步骤
  2. 打开MetaAudienceNetwork(Facebook) Unity Mediation Plugin Changelog下Android/iOS版本链接,查看支持的最新版本情况,并与官网版本对比。一般小版本是bug修复,用最新的即可,大版本要看官网MetaAudienceNetworkSDK 更新状况再决定是否提升
  3. 根据第二步版本更新MetaAudienceNetwor SDK版本

2️⃣注意事项

  • 由MetaAudienceNetwork unity sdk极不受重视,往往版本落后很多,所以需要分别更新android与ios到最新版(此时unity版本是2021 年 4 月 26 日的)

2024.04.20

由于AudienceNetwork Unity SDK 在 6.4.0 停止更新,并且它与苹果隐私必须的 iOS SDK 6.15.0 不兼容,所以采用如下解决方案:

  1. 删除MetaAudienceNetwork unity sdk
  2. 根据ATE文档以及数据处理选项文档新建Assets/GoogleMobileAds/Mediation/MetaAudienceNetwork/Api/MetaAudienceNetwork/MetaAdSettings.cs 文件,并修改GoogleAdsListener相应方法。

9.UnityAds Mediation

1️⃣ SDK 接入或更新

参考通用步骤

打开UnityAds MediationUnity Mediation Plugin Changelog下Android/iOS版本链接,查看支持的最新版本情况,并与官网版本对比。一般小版本是bug修复,用最新的即可,大版本要看官网changelog再决定是否提升

2️⃣注意事项

2024.04.20


三、Tapjoy SDK

1️⃣ SDK 接入或更新

参考通用步骤

2️⃣注意事项

  • Tapjoy SDK下载需要先登录,然后参考ChangeLog选择合适版本下载
  • TapjoySDK具有更新指南,changelog可能不会注名API变更,需要再查看更新指南
  • TapjoyUnity类Awake()添加

#if UNITY_WSA

      return;

#endif

2024.04.20

  • Tapjoy SDK v13.4.0 增加了connectWarning回调。当连接期间出现非阻塞问题时,此回调将触发,connectSuccess也会在之后触发。 目前,此功能仅检测在ConnectFlags中设置UserId的问题。

Tapjoy.OnConnectWarning += HandleConnectWarning;

void HandleConnectWarning(int code, string message)

{

    

}

  • Tapjoy SDK 新增了Assets/TextMesh Pro,里面加入一个字体LiberationSans.ttf
  • 参考其他问题iOS 2-3解决方案,ios需要添加addToAllTargets="true"

四、Firebase SDK

1️⃣ SDK 接入或更新

参考通用步骤

2️⃣注意事项

Firebase SDK 有很多库,我这边只需要以下三个库
FirebaseAnalytics.unitypackage
FirebaseMessaging.unitypackage

FirebaseCrashlytics.unitypackage

五、Appsflyer SDK

1️⃣ SDK 接入或更新

参考通用步骤

2️⃣注意事项

UA SDK 的CMP同意需要等后面再更

六、Facebook SDK

1️⃣ SDK 接入或更新

参考通用步骤

2️⃣注意事项

参考其他问题iOS 2-3解决方案,ios需要添加addToAllTargets="true"

七、Usercentrics SDK

八、其他问题

1.Android​​

  1. App运行时在logcat看到报错Failed to find provider info for com.facebook.katana.provider.AttributionIdProvider不需要管,这是facebook sdk没有检查到facebook客户端输出的log
  2. 采用Unity直接生成安装包时,Android工程临时目录位于Project/Library/Bee/Android/Prj/IL2CPP/Gradle,遇到报错可以在Android Studio打开工程查看解决。
  3. Unsupported Java.

Your build is currently configured to use Java 17.0.9 and Gradle 6.7.1.

这个错误是由于gradle 使用的jdk版本与android studio 的默认版本不同,重新设置对应的jdk版本即可(6.7.1 需要使用jdk 11)

  1.  Task :launcher:checkDuplicateClasses FAILED

Duplicate class com.facebook.android.BuildConfig found in modules jetified-facebook-android-wrapper-16.0.2-runtime (:facebook-android-wrapper-16.0.2:) and jetified-facebook-android-wrapper-16.0.2-runtime (:facebook-android-wrapper-17.0.0:)

Duplicate class com.unity3d.scar.adapter.v2000.ScarAdapter$2 found in modules jetified-UnityAds-runtime (:UnityAds:) and jetified-unity-ads-4.8.0-runtime (com.unity3d.ads:unity-ads:4.8.0)

报错原因是Android Resolver这一步生成了多余的aar,在打包时依赖库重复了,删除其中一个版本即可

  1. 创建本地maven库。有时候我们遇到一些特殊情况,比如打包机远程maven库连不上等,需要将aar下载到本地配置成依赖,这里以"com.chartboost:chartboost-sdk:9.7.0"为例说明一下步骤:
  • 打开chartboost-sdk的远程maven库mavenurl(这里是https://cboost.jfrog.io/ui/native/chartboost-ads/)
  • 根据“com.chartboost:chartboost-sdk:9.7.0”打开路径mavenurl/com/chartboost/chartboost-sdk/,maven-metadata.xml下载到本地依赖库localMavenPath/com/chartboost/chartboost-sdk/目录下
  • 打开路径mavenurl/com/chartboost/chartboost-sdk/9.7.0/并将里面所有的文件下载到本地依赖库localMavenPath/com/chartboost/chartboost-sdk/9.7.0/目录下
  • build.gradleproject.repositories {}中添加

 maven {     url "file:///localMavenPath"     }

  • 打包测试

2.iOS

2-1xcode 15.2 版本 xcodeProject/Libraries/Plugins/iOS/NativeKeyboard.a 报错 duplicate symbol

 

解决方案参考苹果官方说明以及开发者论坛帖子

Xcode > UnityFramework > Build Setting > Other Linker Flags 添加一行"-ld_classic"

2-2打包完成运行报错 xxx.app/Frameworks/XXX.framework/XXX' (no such file)

由于动态链接库与静态链接库兼容问题,三方SDK没有自动嵌入工程中,有以下三种解决方案:

  •  参考这里的解决方案需要将xxSDK.xcframework从 Pods 拖到 Unity-Iphone。 然后,将其添加到Frameworks, Libraries, and Embedded Content部分并将其设置为“embed & sign”进行手动嵌入。
  • 参考这里的解决方案需要修改默认的ios resolver的配置,但可能会带来后续的其他问题
  • 参考这里的解决方案,添加addToAllTargets="true" 到SDK的<iosPods>下版本号后面

<?xml version="1.0" encoding="utf-8"?>

<dependencies>

<iosPods>

<iosPod name="FBSDKCoreKit_Basics" version="~> 16.0" addToAllTargets="true" />    

</iosPods>

</dependencies>

2-3出现类似警告[!] Found multiple specifications for `GoogleAppMeasurement (10.23.0)`:

/Users/starlark/.cocoapods/repos/trunk/Specs/e/3/b/GoogleAppMeasurement/10.23.0/GoogleAppMeasurement.podspec.json

/Users/starlark/.cocoapods/repos/cocoapods/Specs/e/3/b/GoogleAppMeasurement/10.23.0/GoogleAppMeasurement.podspec.json

原因是更新SDK时三方SDK需要签名。由于苹果隐私政策要求,​​​​​​当你在 App 中采用第三方 SDK 的新版本时,Xcode 将验证它是否由同一开发者签名,从而提高软件供应链的完整性。具体而言就是下图Pods下蓝色的SDK target 都需要签名

2-4 由于项目验证Apple 登录接口,query部分参数带有'[ ]',于是触发了iOS17双重编码bug,在Unity修复前需要修改 xcodeProject/Classes/Unity/UnityWebRequest.mm文件。将

request.URL = [NSURL URLWithString: [NSString stringWithUTF8String: url]];

替换为

if (@available(iOS 17.0, *)) {

           NSString *decodedURLString = [[NSString stringWithUTF8String: url] stringByRemovingPercentEncoding];

            request.URL = [NSURL URLWithString: decodedURLString];

} else {

            request.URL = [NSURL URLWithString: [NSString stringWithUTF8String: url]];

}

2-5 Command PhaseScriptExecution failed with a nonzero exit code

在构建过程中的某个脚本执行阶段失败了,一般是由于缓存问题导致的,Product > Clean清理一下即可

2-6 SDK依赖的库需要更新,但是SDK本身不需要更新

2024.05版本更新时遇到了Applovin SDK需要更新到12.4.2,但是AppLovin Unity Mediation Plugin还没有更新指定依赖12.4.1,此时我们可以修改AppLovin Unity Mediation Plugin依赖版本来解决,具体步骤如下:

  • 打开CocoaPods/Specs并搜索需要修改的SDK(比如这里搜GoogleMobileAdsMediationAppLovin
  • 下载所需版本的podspec.json文件(这里是GoogleMobileAdsMediationAppLovin.podspec.json
  • 修改json文件中dependencies下的目标版本号(这里是"AppLovinSDK": "12.4.2"
  • 在导出的工程的Podfile中将sdk的版本号修改为:podspec => '/path/to/your/modified/xxx.podspec.json'(这里是将

pod 'GoogleMobileAdsMediationAppLovin', '12.4.1.0'

修改为

pod 'GoogleMobileAdsMediationAppLovin', :podspec => '/path/to/your/modified/GoogleMobileAdsMediationAppLovin.podspec.json'

  • 在命令行CD到Podfile目录,执行命令pod install --repo-update更新目标SDK版本
  • 重新打包

2-7 iOS 17.4 ATT bug

.在iOS17.4上,第一次请求ATT时,玩家还没有选择允许或拒绝就会返回拒绝(iOS17.5beta已修复)

解决方案为在ATT返回拒绝但是实际状态还是未选择时添加一个观察者,等到游戏获得焦点后(此时玩家已作出选择,返回的是真实的状态)再调用一次权限请求,然后删除观察者。

-(void)RequestATTAuthorization{
    
            
            [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
                if (status == ATTrackingManagerAuthorizationStatusDenied&& [ATTrackingManager trackingAuthorizationStatus] == ATTrackingManagerAuthorizationStatusNotDetermined) {
                    NSLog(@"iOS 17.4 ATT bug detected");
                    [self addObserver];
                    return;
                } else{
                    [self removeObserver];
                    if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
                        NSLog(@"iOS14, ATT enabled");
                        [FBAdSettings setAdvertiserTrackingEnabled:YES];
                        NSLog(@"iOS14, ATT enabled, FBAdSettings setAdvertiserTrackingEnabled:YES successed");
                        
                    } else if (status == ATTrackingManagerAuthorizationStatusDenied) {
                        NSLog(@"iOS14, ATT disabled");
                        [FBAdSettings setAdvertiserTrackingEnabled:NO];
                        NSLog(@"iOS14, ATT disabled, FBAdSettings setAdvertiserTrackingEnabled:NO successed");
                    }
                    UnitySendMessage("StoreKitListener", "OnRequestATTPermissionFinished", [[NSString stringWithFormat:@"%d", (int)status] cStringUsingEncoding:NSUTF8StringEncoding]);
                }
                
            }];

}
- (void)addObserver {
    [self removeObserver];
    self.observer = [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidBecomeActiveNotification
                                                                      object:nil
                                                                       queue:[NSOperationQueue mainQueue]
                                                                  usingBlock:^(NSNotification * _Nonnull note) {
        [self RequestATTAuthorization];
    }];
}

- (void)removeObserver {
    if (self.observer != nil) {
        [[NSNotificationCenter defaultCenter] removeObserver:self.observer];
    }
    self.observer = nil;
}

3.UWP

待更新

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值