Skip to content

ToBid SDK - Unity 入门指南

注意: 由于Unity插件更改了结构,且开始使用PlayServicesResolver第三方库管理工具,如果之前您已经使用了2.14.0之前的版本,在您使用2.14.0版本导入前请先移除之前导入的库。由于现在使用第三包管理工具,iOS使用Cocoapods,如果您还未安装Cocoapods环境,请参考Cocoapods官方教程

如果作为聚合接入且接入了Google AdMob SDK,需要在info.plist 添加GADApplicationIdentifier字段,value为AppId,<key>GADApplicationIdentifier</key><string>申请的admob的appid</string>,具体请参考Google AdMob 文档:https://developers.google.com/admob/ios/quick-start

来自Google文档参数,仅做参考。

xml
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-3940256099942544~1458002511</string>

步骤 1:使用 ToBid Unity 插件设置 Unity 项目

将 ToBid Unity 插件添加到 Unity 项目中

在 Unity 中打开您的项目,双击下载的 ToBid-XXX.unitypackage 文件以将 ToBid Unity 插件添加到您的应用程序。当“导入 Unity 程序包”窗口打开时,如果您需要导入全部渠道,点击“全部”即可选择全部,然后导入。如果需要删除部分渠道,请在导入时在Mediation中勾选需要导入的渠道即可。

在构建设置中选择面向的正确平台。

为避免后续步骤中的编译错误,请确保项目的**“构建设置”(cmd + Shift + B)** 选择面向的是 iOSAndroid 平台。

步骤 2:集成环境相关配置

在本演练中,我们初始化了附属于主**“游戏对象”**的脚本中的所有 ToBid 相关代码。您可以从任何您认为合适的脚本中调用 ToBid Unity 插件。

Android相关配置

Unity 2019及以上版本配置说明

1、gradle配置

按照下图,生成launcherTemplate.gradle和mainTemplate.gradle文件

avatar

注意:Unity2019版本针对生成后的mainTemplate.gradle需增加以下配置:

注意:Unity2020版本针对生成后的launcherTemplate.gradle需增加以下配置(mainTemplate.gradle不需要此操作,但需要生成):

android {
    ......
    defaultConfig {
        applicationId '**APPLICATIONID**'
        ......
        versionCode **VERSIONCODE**
        versionName '**VERSIONNAME**'

        multiDexEnabled true //添加此配置,是为了当代码行数超过64k的时候设置的
    }
    ......
}
2、 Unity 2020 中缺少 ToBid Android 配置文件

为了支持无法自定义 Gradle 构建的 Unity 版本, ToBid SDK 要把 Assets/Plugins/Android/ToBid/ 打包到 Android 构建中的 Android 资源中。

在 Unity 2020 以上中,所有 Android 资源都必须位于带有 .androidlib后缀的目录中。如果您的项目使用生成 Assets/Plugins/Android/ToBid 目录的 ToBid 资源文件,请将其重命名为 Assets/Plugins/Android/ToBid.androidlib.

3、AndroidX配置

按照下图,生成gradleTemplate.properties文件。

avatar

注意:针对生成后的gradleTemplate.properties需增加以下配置:

org.gradle.jvmargs=-Xmx**JVM_HEAP_SIZE**M
org.gradle.parallel=true
**ADDITIONAL_PROPERTIES**

//添加以下配置
android.enableJetifier=true
android.useAndroidX=true

1.1 AndroidManifest.xml 权限内容

xml
 <!--SDK 所需要权限-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<!--SDK 国内所需要权限-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 集成了Vungle务必添加replace -->
<uses-permission
    android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--targetSDKVersion >= 26时才需要添加这个权限。-->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

1.2 添加 AndroidManifest.xml Provider内容

xml
<provider
    android:name="com.bytedance.sdk.openadsdk.TTFileProvider"
    android:authorities="${applicationId}.TTFileProvider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

<provider
    android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider"
    android:authorities="${applicationId}.TTMultiProvider"
    android:exported="false" />
    
<!-- GDT -->
<provider
    android:name="com.qq.e.comm.GDTFileProvider"
    android:authorities="${applicationId}.gdt.fileprovider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/gdt_file_path" />
</provider>

<provider
    android:name="com.tencent.klevin.utils.FileProvider"
    android:authorities="${applicationId}.klevin.fileProvider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/klevin_provider_paths" />
</provider>

1.3 添加 AndroidManifest.xml 第三方库配置内容

xml
<uses-sdk tools:overrideLibrary="com.bun.miitmdid,com.unity3d.ads" />
<uses-library
    android:name="org.apache.http.legacy"
    android:required="false" />

1.4 添加 AndroidManifest.xml UnityPlayerActivity开启hardwareAccelerated

xml
<activity
    android:name="com.unity3d.player.UnityPlayerActivity"

    android:hardwareAccelerated="true"

    android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
    android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

iOS添加相关依赖库

可在unity build时写脚本自动配置iOS工程,示例代码如下(仅供参考):

C#
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("Unity-iPhone");

		//--------------------- 
		//1、修改设置
		//添加系统库
		proj.AddFrameworkToProject(buildTarget,"CoreTelephony.framework", false);
		proj.AddFrameworkToProject(buildTarget,"Security.framework", false);  
        proj.AddFrameworkToProject(buildTarget,"CoreLocation.framework", false);  
		proj.AddFrameworkToProject(buildTarget,"MobileCoreServices.framework", false);
		proj.AddFrameworkToProject(buildTarget,"StoreKit.framework", false);
		proj.AddFrameworkToProject(buildTarget,"AdSupport.framework", false);
		proj.AddFrameworkToProject(buildTarget,"ImageIO.framework", false);  
		proj.AddFrameworkToProject(buildTarget,"SafariServices.framework", true);
		proj.AddFrameworkToProject(buildTarget,"WebKit.framework", true);

		//--------------------- 

		//添加tbd
		string fileGuidSqlite = proj.AddFile("usr/lib/libsqlite3.0.tbd", "Libraries/libsqlite3.0.tbd", PBXSourceTree.Sdk);
		proj.AddFileToBuild(buildTarget, fileGuidSqlite);

		string fileGuidLibz = proj.AddFile("usr/lib/libz.tbd", "Libraries/libz.tbd", PBXSourceTree.Sdk);
		proj.AddFileToBuild(buildTarget, fileGuidLibz);

		string fileGuidLibc= proj.AddFile("usr/lib/libc++.tbd", "Libraries/libc++.tbd", PBXSourceTree.Sdk);
		proj.AddFileToBuild(buildTarget, fileGuidLibc);
		//--------------------- 

		//修改属性
		proj.SetBuildProperty(buildTarget,"ENABLE_BITCODE", "YES");
		proj.AddBuildProperty(buildTarget, "OTHER_LDFLAGS", "-ObjC");

		//--------------------- 
        //info.plist
        string plistPath = pathToBuildProject + "/Info.plist";
        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 = "NSAppTransportSecurity";
        PlistElementDict dictTmp = rootDict.CreateDict(atsKey);
            dictTmp.SetBoolean("NSAllowsArbitraryLoads", true);
            rootDict.SetString("NSLocationWhenInUseUsageDescription", "是否允许使用定位权限");
        rootDict.SetString("CFBundleDevelopmentRegion", "China");
        
        
            File.WriteAllText (projPath, proj.WriteToString());

	}
}

oaid相关配置

建议开发者优先集成OAID。Android 10 无法通过常规方式获取IMEI,影响广告测试及正式广告的填充。

MSA联盟官网地址: http://www.msa-alliance.cn/col.jsp?id=120

2.20 版本后,支持 MSA 1.0.22 版本

  • 1、把 msa_mdid_x.x.x.aar 或者 oaid_sdk_x.x.x.aar 拷贝到项的 libs 目录,并设置依赖,其中 x.x.x 代表版本号。

      implementation files('libs/msa_mdid_x.x.x.aar')
      或者
      implementation files('libs/oaid_sdk_x.x.x.aar')
    
  • 2、将 supplierconfig.json 拷贝到项目 assets 目录下,并修改里边对应内容,特别是需要设置 appid 的部分。需要设置 appid 的部分需要去对应厂商的应用商店里注册自己的app。

  • 3、混淆设置。

java
-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 <methods>;}
-keep class com.samsung.android.deviceidservice.**{*;}
-keep class a.**{*;}
  • 4、设置 gradle 编译选项,这块可以根据自己对平台的选择进里合里配置。
ndk {
    abiFilters 'armeabi-v7a','x86','arm64-v8a','x86_64','armeabi'
}
packagingOptions {
    doNotStrip "*/armeabi-v7a/*.so"
    doNotStrip "*/x86/*.so"
    doNotStrip "*/arm64-v8a/*.so"
    doNotStrip "*/x86_64/*.so"
    doNotStrip "armeabi.so"
}

android混淆配置说明

# 不优化输入的类文件
-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 <methods>;}