SDK - Unity 入门指南
<p><strong>注意:</strong> 由于Unity插件更改了结构,且开始使用PlayServicesResolver第三方库管理工具,如果之前您已经使用了2.14.0之前的版本,在您使用2.14.0版本导入前请先移除之前导入的库。由于现在使用第三包管理工具,iOS使用Cocoapods,如果您还未安装Cocoapods环境,请参考<a href="https://guides.cocoapods.org/using/getting-started.html#getting-started">Cocoapods</a>官方教程</p>
<p>> 如果作为聚合接入且接入了Google AdMob SDK,需要在info.plist 添加GADApplicationIdentifier字段,value为AppId,<code>&lt;key&gt;GADApplicationIdentifier&lt;/key&gt;&lt;string&gt;申请的admob的appid&lt;/string&gt;</code>,具体请参考Google AdMob 文档:<a href="https://developers.google.com/admob/ios/quick-start"><a href="https://developers.google.com/admob/ios/quick-start">https://developers.google.com/admob/ios/quick-start</a></a></p>
<p><strong>来自Google文档参数,仅做参考。</strong></p>
<p>xml</p>
<pre><code>&lt;key&gt;GADApplicationIdentifier&lt;/key&gt;
&lt;string&gt;ca-app-pub-3940256099942544~1458002511&lt;/string&gt;</code></pre>
<h2>步骤 1:使用 ToBid Unity 插件设置 Unity 项目<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/Unity/SDK%E6%8E%A5%E5%85%A5%E9%85%8D%E7%BD%AE/#%E6%AD%A5%E9%AA%A4-1-%E4%BD%BF%E7%94%A8-tobid-unity-%E6%8F%92%E4%BB%B6%E8%AE%BE%E7%BD%AE-unity-%E9%A1%B9%E7%9B%AE"></a></h2>
<h3>将 ToBid Unity 插件添加到 Unity 项目中<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/Unity/SDK%E6%8E%A5%E5%85%A5%E9%85%8D%E7%BD%AE/#%E5%B0%86-tobid-unity-%E6%8F%92%E4%BB%B6%E6%B7%BB%E5%8A%A0%E5%88%B0-unity-%E9%A1%B9%E7%9B%AE%E4%B8%AD"></a></h3>
<p>在 Unity 中打开您的项目,双击下载的 <strong>ToBid-XXX.unitypackage</strong> 文件以将 <strong>ToBid Unity</strong> 插件添加到您的应用程序。当“导入 Unity 程序包”窗口打开时,如果您需要导入全部渠道,点击“全部”即可选择全部,然后导入。如果需要删除部分渠道,请在导入时在Mediation中勾选需要导入的渠道即可。</p>
<h3>在构建设置中选择面向的正确平台。<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/Unity/SDK%E6%8E%A5%E5%85%A5%E9%85%8D%E7%BD%AE/#%E5%9C%A8%E6%9E%84%E5%BB%BA%E8%AE%BE%E7%BD%AE%E4%B8%AD%E9%80%89%E6%8B%A9%E9%9D%A2%E5%90%91%E7%9A%84%E6%AD%A3%E7%A1%AE%E5%B9%B3%E5%8F%B0%E3%80%82"></a></h3>
<p>为避免后续步骤中的编译错误,请确保项目的**“构建设置”(cmd + Shift + B)** 选择面向的是 <strong>iOS</strong> 或 <strong>Android</strong> 平台。</p>
<h2>步骤 2:集成环境相关配置<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/Unity/SDK%E6%8E%A5%E5%85%A5%E9%85%8D%E7%BD%AE/#%E6%AD%A5%E9%AA%A4-2-%E9%9B%86%E6%88%90%E7%8E%AF%E5%A2%83%E7%9B%B8%E5%85%B3%E9%85%8D%E7%BD%AE"></a></h2>
<p>在本演练中,我们初始化了附属于主**“游戏对象”**的脚本中的所有 ToBid 相关代码。您可以从任何您认为合适的脚本中调用 <strong>ToBid Unity</strong> 插件。</p>
<h3>Android相关配置<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/Unity/SDK%E6%8E%A5%E5%85%A5%E9%85%8D%E7%BD%AE/#android%E7%9B%B8%E5%85%B3%E9%85%8D%E7%BD%AE"></a></h3>
<h4>Unity 2019及以上版本配置说明<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/Unity/SDK%E6%8E%A5%E5%85%A5%E9%85%8D%E7%BD%AE/#unity-2019%E5%8F%8A%E4%BB%A5%E4%B8%8A%E7%89%88%E6%9C%AC%E9%85%8D%E7%BD%AE%E8%AF%B4%E6%98%8E"></a></h4>
<h5>1、gradle配置<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/Unity/SDK%E6%8E%A5%E5%85%A5%E9%85%8D%E7%BD%AE/#_1%E3%80%81gradle%E9%85%8D%E7%BD%AE"></a></h5>
<p>按照下图,生成launcherTemplate.gradle和mainTemplate.gradle文件</p>
<p><img src="https://cdn-sdk.sigmob.cn/docs/FCD69228-9444-4571-841A-9B84965B97A3.png" alt="avatar" /></p>
<p><strong>注意</strong>:Unity2019版本针对生成后的mainTemplate.gradle需增加以下配置:</p>
<p><strong>注意</strong>:Unity2020版本针对生成后的launcherTemplate.gradle需增加以下配置(mainTemplate.gradle不需要此操作,但需要生成):</p>
<pre><code>android {
......
defaultConfig {
applicationId '**APPLICATIONID**'
......
versionCode **VERSIONCODE**
versionName '**VERSIONNAME**'
multiDexEnabled true //添加此配置,是为了当代码行数超过64k的时候设置的
}
......
}</code></pre>
<h5>2、 Unity 2020 中缺少 ToBid Android 配置文件<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/Unity/SDK%E6%8E%A5%E5%85%A5%E9%85%8D%E7%BD%AE/#_2%E3%80%81-unity-2020-%E4%B8%AD%E7%BC%BA%E5%B0%91-tobid-android-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6"></a></h5>
<p>为了支持无法自定义 Gradle 构建的 Unity 版本, ToBid SDK 要把 Assets/Plugins/Android/ToBid/ 打包到 Android 构建中的 Android 资源中。</p>
<p>在 Unity 2020 以上中,所有 Android 资源都必须位于带有 .androidlib后缀的目录中。如果您的项目使用生成 Assets/Plugins/Android/ToBid 目录的 ToBid 资源文件,请将其重命名为 Assets/Plugins/Android/ToBid.androidlib.</p>
<h5>3、AndroidX配置<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/Unity/SDK%E6%8E%A5%E5%85%A5%E9%85%8D%E7%BD%AE/#_3%E3%80%81androidx%E9%85%8D%E7%BD%AE"></a></h5>
<p>按照下图,生成gradleTemplate.properties文件。</p>
<p><img src="https://cdn-sdk.sigmob.cn/docs/93B89FCE-2CF1-4DCC-8B63-B12D5A33BE37.png" alt="avatar" /></p>
<p><strong>注意</strong>:针对生成后的gradleTemplate.properties需增加以下配置:</p>
<pre><code>org.gradle.jvmargs=-Xmx**JVM_HEAP_SIZE**M
org.gradle.parallel=true
**ADDITIONAL_PROPERTIES**
//添加以下配置
android.enableJetifier=true
android.useAndroidX=true</code></pre>
<h4>1.1 AndroidManifest.xml 权限内容<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/Unity/SDK%E6%8E%A5%E5%85%A5%E9%85%8D%E7%BD%AE/#_1-1-androidmanifest-xml-%E6%9D%83%E9%99%90%E5%86%85%E5%AE%B9"></a></h4>
<p>xml</p>
<pre><code> &lt;!--SDK 所需要权限--&gt;
&lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&gt;
&lt;uses-permission android:name=&quot;android.permission.ACCESS_NETWORK_STATE&quot; /&gt;
&lt;!--SDK 国内所需要权限--&gt;
&lt;uses-permission android:name=&quot;android.permission.ACCESS_WIFI_STATE&quot; /&gt;
&lt;uses-permission android:name=&quot;android.permission.READ_PHONE_STATE&quot; /&gt;
&lt;uses-permission android:name=&quot;android.permission.ACCESS_COARSE_LOCATION&quot; /&gt;
&lt;uses-permission android:name=&quot;android.permission.CHANGE_WIFI_STATE&quot; /&gt;
&lt;uses-permission android:name=&quot;android.permission.ACCESS_FINE_LOCATION&quot; /&gt;
&lt;!-- 集成了Vungle务必添加replace --&gt;
&lt;uses-permission
android:name=&quot;android.permission.WRITE_EXTERNAL_STORAGE&quot;/&gt;
&lt;!--targetSDKVersion &gt;= 26时才需要添加这个权限。--&gt;
&lt;uses-permission android:name=&quot;android.permission.REQUEST_INSTALL_PACKAGES&quot; /&gt;</code></pre>
<h4>1.2 添加 AndroidManifest.xml Provider内容<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/Unity/SDK%E6%8E%A5%E5%85%A5%E9%85%8D%E7%BD%AE/#_1-2-%E6%B7%BB%E5%8A%A0-androidmanifest-xml-provider%E5%86%85%E5%AE%B9"></a></h4>
<p>xml</p>
<pre><code>&lt;provider
android:name=&quot;com.bytedance.sdk.openadsdk.TTFileProvider&quot;
android:authorities=&quot;${applicationId}.TTFileProvider&quot;
android:exported=&quot;false&quot;
android:grantUriPermissions=&quot;true&quot;&gt;
&lt;meta-data
android:name=&quot;android.support.FILE_PROVIDER_PATHS&quot;
android:resource=&quot;@xml/toutiao&quot; /&gt;
&lt;/provider&gt;
&lt;provider
android:name=&quot;com.bytedance.sdk.openadsdk.multipro.TTMultiProvider&quot;
android:authorities=&quot;${applicationId}.TTMultiProvider&quot;
android:exported=&quot;false&quot; /&gt;
&lt;!-- GDT --&gt;
&lt;provider
android:name=&quot;com.qq.e.comm.GDTFileProvider&quot;
android:authorities=&quot;${applicationId}.gdt.fileprovider&quot;
android:exported=&quot;false&quot;
android:grantUriPermissions=&quot;true&quot;&gt;
&lt;meta-data
android:name=&quot;android.support.FILE_PROVIDER_PATHS&quot;
android:resource=&quot;@xml/gdt_file_path&quot; /&gt;
&lt;/provider&gt;
&lt;provider
android:name=&quot;com.tencent.klevin.utils.FileProvider&quot;
android:authorities=&quot;${applicationId}.klevin.fileProvider&quot;
android:exported=&quot;false&quot;
android:grantUriPermissions=&quot;true&quot;&gt;
&lt;meta-data
android:name=&quot;android.support.FILE_PROVIDER_PATHS&quot;
android:resource=&quot;@xml/klevin_provider_paths&quot; /&gt;
&lt;/provider&gt;</code></pre>
<h4>1.3 添加 AndroidManifest.xml 第三方库配置内容<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/Unity/SDK%E6%8E%A5%E5%85%A5%E9%85%8D%E7%BD%AE/#_1-3-%E6%B7%BB%E5%8A%A0-androidmanifest-xml-%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%93%E9%85%8D%E7%BD%AE%E5%86%85%E5%AE%B9"></a></h4>
<p>xml</p>
<pre><code>&lt;uses-sdk tools:overrideLibrary=&quot;com.bun.miitmdid,com.unity3d.ads&quot; /&gt;
&lt;uses-library
android:name=&quot;org.apache.http.legacy&quot;
android:required=&quot;false&quot; /&gt;</code></pre>
<h4>1.4 添加 AndroidManifest.xml UnityPlayerActivity开启hardwareAccelerated<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/Unity/SDK%E6%8E%A5%E5%85%A5%E9%85%8D%E7%BD%AE/#_1-4-%E6%B7%BB%E5%8A%A0-androidmanifest-xml-unityplayeractivity%E5%BC%80%E5%90%AFhardwareaccelerated"></a></h4>
<p>xml</p>
<pre><code>&lt;activity
android:name=&quot;com.unity3d.player.UnityPlayerActivity&quot;
android:hardwareAccelerated=&quot;true&quot;
android:configChanges=&quot;fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen&quot;
android:label=&quot;@string/app_name&quot;&gt;
&lt;intent-filter&gt;
&lt;action android:name=&quot;android.intent.action.MAIN&quot; /&gt;
&lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&gt;
&lt;/intent-filter&gt;
&lt;/activity&gt;</code></pre>
<h3>iOS添加相关依赖库<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/Unity/SDK%E6%8E%A5%E5%85%A5%E9%85%8D%E7%BD%AE/#ios%E6%B7%BB%E5%8A%A0%E7%9B%B8%E5%85%B3%E4%BE%9D%E8%B5%96%E5%BA%93"></a></h3>
<p>> 可在unity build时写脚本自动配置iOS工程,示例代码如下(仅供参考):</p>
<pre><code>public class XcodeProjectUpdater {
[PostProcessBuild]
public static void OnPostprocessBuild(BuildTarget target, string pathToBuildProject) {
if (target != BuildTarget.iOS) return;
//.xcodeproj的路径
string projPath = PBXProject.GetPBXProjectPath(pathToBuildProject);
PBXProject proj = new PBXProject();
proj.ReadFromString(File.ReadAllText(projPath));
string buildTarget = proj.TargetGuidByName(&quot;Unity-iPhone&quot;);
//---------------------
//1、修改设置
//添加系统库
proj.AddFrameworkToProject(buildTarget,&quot;CoreTelephony.framework&quot;, false);
proj.AddFrameworkToProject(buildTarget,&quot;Security.framework&quot;, false);
proj.AddFrameworkToProject(buildTarget,&quot;CoreLocation.framework&quot;, false);
proj.AddFrameworkToProject(buildTarget,&quot;MobileCoreServices.framework&quot;, false);
proj.AddFrameworkToProject(buildTarget,&quot;StoreKit.framework&quot;, false);
proj.AddFrameworkToProject(buildTarget,&quot;AdSupport.framework&quot;, false);
proj.AddFrameworkToProject(buildTarget,&quot;ImageIO.framework&quot;, false);
proj.AddFrameworkToProject(buildTarget,&quot;SafariServices.framework&quot;, true);
proj.AddFrameworkToProject(buildTarget,&quot;WebKit.framework&quot;, true);
//---------------------
//添加tbd
string fileGuidSqlite = proj.AddFile(&quot;usr/lib/libsqlite3.0.tbd&quot;, &quot;Libraries/libsqlite3.0.tbd&quot;, PBXSourceTree.Sdk);
proj.AddFileToBuild(buildTarget, fileGuidSqlite);
string fileGuidLibz = proj.AddFile(&quot;usr/lib/libz.tbd&quot;, &quot;Libraries/libz.tbd&quot;, PBXSourceTree.Sdk);
proj.AddFileToBuild(buildTarget, fileGuidLibz);
string fileGuidLibc= proj.AddFile(&quot;usr/lib/libc++.tbd&quot;, &quot;Libraries/libc++.tbd&quot;, PBXSourceTree.Sdk);
proj.AddFileToBuild(buildTarget, fileGuidLibc);
//---------------------
//修改属性
proj.SetBuildProperty(buildTarget,&quot;ENABLE_BITCODE&quot;, &quot;YES&quot;);
proj.AddBuildProperty(buildTarget, &quot;OTHER_LDFLAGS&quot;, &quot;-ObjC&quot;);
//---------------------
//info.plist
string plistPath = pathToBuildProject + &quot;/Info.plist&quot;;
PlistDocument plist = new PlistDocument();
plist.ReadFromString(File.ReadAllText(plistPath));
// Get root
PlistElementDict rootDict = plist.root;
/* iOS9所有的app对外http协议默认要求改成https */
// Add value of NSAppTransportSecurity in Xcode plist
var atsKey = &quot;NSAppTransportSecurity&quot;;
PlistElementDict dictTmp = rootDict.CreateDict(atsKey);
dictTmp.SetBoolean(&quot;NSAllowsArbitraryLoads&quot;, true);
rootDict.SetString(&quot;NSLocationWhenInUseUsageDescription&quot;, &quot;是否允许使用定位权限&quot;);
rootDict.SetString(&quot;CFBundleDevelopmentRegion&quot;, &quot;China&quot;);
File.WriteAllText (projPath, proj.WriteToString());
}
}</code></pre>
<h3>oaid相关配置<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/Unity/SDK%E6%8E%A5%E5%85%A5%E9%85%8D%E7%BD%AE/#oaid%E7%9B%B8%E5%85%B3%E9%85%8D%E7%BD%AE"></a></h3>
<p><strong>建议开发者优先集成OAID。Android 10 无法通过常规方式获取IMEI,影响广告测试及正式广告的填充。</strong></p>
<p><strong>MSA联盟官网地址: <a href="http://www.msa-alliance.cn/col.jsp?id=120"><a href="http://www.msa-alliance.cn/col.jsp?id=120">http://www.msa-alliance.cn/col.jsp?id=120</a></a></strong></p>
<p>> <em><strong>2.20 版本后,支持 MSA 1.0.22 版本</strong></em></p>
<ul>
<li>
<p>1、把 msa_mdid_x.x.x.aar 或者 oaid_sdk_x.x.x.aar 拷贝到项的 libs 目录,并设置依赖,其中 x.x.x 代表版本号。</p>
<pre><code> implementation files('libs/msa_mdid_x.x.x.aar')
或者
implementation files('libs/oaid_sdk_x.x.x.aar')</code></pre>
</li>
<li>
<p>2、将 supplierconfig.json 拷贝到项目 assets 目录下,并修改里边对应内容,特别是需要设置 appid 的部分。需要设置 appid 的部分需要去对应厂商的应用商店里注册自己的app。</p>
</li>
<li>3、混淆设置。</li>
</ul>
<p>java</p>
<pre><code>-keep class com.bun.** {*;}
-dontwarn com.bun.**
-keep, includedescriptorclasses class com.asus.msa.SupplementaryDID.** { *; }
-keepclasseswithmembernames class com.asus.msa.SupplementaryDID.** { *; }
-keep, includedescriptorclasses class com.asus.msa.sdid.** { *; }
-keepclasseswithmembernames class com.asus.msa.sdid.** { *; }
-keep public class com.netease.nis.sdkwrapper.Utils {public &lt;methods&gt;;}
-keep class com.samsung.android.deviceidservice.**{*;}
-keep class a.**{*;}</code></pre>
<ul>
<li>
<p>4、设置 gradle 编译选项,这块可以根据自己对平台的选择进里合里配置。</p>
<p>ndk {
abiFilters 'armeabi-v7a','x86','arm64-v8a','x86_64','armeabi'
}
packagingOptions {
doNotStrip "<em>/armeabi-v7a/</em>.so"
doNotStrip "<em>/x86/</em>.so"
doNotStrip "<em>/arm64-v8a/</em>.so"
doNotStrip "<em>/x86_64/</em>.so"
doNotStrip "armeabi.so"
}</p>
</li>
</ul>
<h3>android混淆配置说明<a href="https://doc.sigmob.com/ToBid%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97/SDK%E9%9B%86%E6%88%90%E8%AF%B4%E6%98%8E/Unity/SDK%E6%8E%A5%E5%85%A5%E9%85%8D%E7%BD%AE/#android%E6%B7%B7%E6%B7%86%E9%85%8D%E7%BD%AE%E8%AF%B4%E6%98%8E"></a></h3>
<pre><code># 不优化输入的类文件
-dontoptimize
#忽略警告
-ignorewarnings
# WindMillAd
-dontwarn com.sigmob.**
-keep class com.sigmob.**{ *;}
-keep interface com.sigmob.**{ *;}
-dontwarn com.czhj.**
-keep class com.czhj.**{ *;}
-keep interface com.czhj.**{ *;}
-keep class com.tan.**{ *;}
-dontwarn com.windmill.**
-keep class com.windmill.**.**{*;}
-keep interface com.windmill.**{ *;}
# miitmdid
-dontwarn com.bun.**
-keep class com.bun.** {*;}
-keep class a.**{*;}
-keep class XI.CA.XI.**{*;}
-keep class XI.K0.XI.**{*;}
-keep class XI.XI.K0.**{*;}
-keep class XI.vs.K0.**{*;}
-keep class XI.xo.XI.XI.**{*;}
-keep class com.asus.msa.SupplementaryDID.**{*;}
-keep class com.asus.msa.sdid.**{*;}
-keep class com.huawei.hms.ads.identifier.**{*;}
-keep class com.samsung.android.deviceidservice.**{*;}
-keep class com.zui.opendeviceidlibrary.**{*;}
-keep class org.json.**{*;}
-keep public class com.netease.nis.sdkwrapper.Utils {public &lt;methods&gt;;}</code></pre>