主题
Unity3D接入指南
SDK iOS支持 iOS11 及以上版本,Android支持 Android6.0 API23 及以上版本
一、SDK 安装
1.1插件下载
前往下载最新版的Apptrace Unity3D plugin SDK。前往下载
1.2 插件安装
在Unity中找到Assets - Import Package - Custom Package, 找到刚下载的插件, 选择导入全部文件。导入完成后,找到Apptrace.prefab, 添加到场景中即可。
二、配置 appKey 和 SDK 初始化
请先从AppTrace控制台获取AppKey
Android和iOS均支持 2 种方式来进行 appKey 的配置,选择其中一种来配置即可
2.1 Android配置方式
- 在Unity中, 找到项目的AndroidManifest.xml文件,在
<application>...</application>
中修改以下配置
html
<meta-data
android:name="cn.apptrace.APP_KEY"
android:value="AppTrace管理平台分配的key"/>
如果项目中已经存在其他自定义的AndroidManifest.xml文件, 则需要删除Assets/Plugins/Android里面的AndroidManifest.xml, 然后参考被删除AndroidManifest.xml里的代码实现,在已存在的文件中进行AppTrace SDK的配置。
- 在项目中找到ApptraceBridge文件里的startInit函数,通过configuration.setAppKey("AppTrace管理平台分配的key")语句来设置
java
configuration.setAppKey("AppTrace管理平台分配的key");
如果项目中已经存在继承于UnityPlayerActivity类的自定义类文件,则需要删除Assets/Plugins/Android/src里面的ApptraceActivity, 并需要参考ApptraceActivity里的代码进行SDK的初始化。
2.2 iOS配置方式
- 在 Info.plist 文件中配置
html
<key>cn.apptrace.appKey</key>
<string>AppTrace管理平台分配的key</string>
- 在项目中找到ApptraceBridge文件里的startInit方法,通过初始化 Apptrace SDK 时的入参来设置
objectivec
[Apptrace initWithDelegate:self appKey:@"AppTrace管理平台分配的key"];
如果项目中已经用IMPL_APP_CONTROLLER_SUBCLASS生成了Controller文件,则需要删除Assets/Plugins/iOS里面的ApptraceController文件, 然后参考ApptraceController里的代码实现,进行SDK的初始化。
三、功能集成
1、获取应用安装时携带的参数
在 APP 需要安装参数时(由 web 网页中传递过来的,如邀请码、游戏房间号等动态参数),调用 GetInstall 函数,在回调中获取参数
c#
using cn.apptrace.unity;
void Start()
{
apptrace = GameObject.Find("Apptrace").GetComponent<Apptrace>();
apptrace.GetInstall(OnInstallResult);
}
void OnInstallResult(ApptraceAppData appData)
{
string result = JsonUtility.ToJson(appData);
Debug.Log("Apptrace OnInstallResult: " + result);
}
2、获取一键拉起携带的参数
2.1 开启一键拉起功能
iOS开启
登录 AppTrace 的管理后台,找到 iOS 集成配置,开启相关功能,参考下图所示。其中 Team Id 可以在 Apple 开发者后台查看。
Android开启
登录 AppTrace 的管理后台,找到 Android 集成配置,开启相关功能,参考下图所示。
2.2 代码配置
iOS配置
开启 Associated Domains 服务
在 xcode 中所示位置配置 AppTrace 后台提供的关联域名
Android配置
找到项目中AndroidManifest.xml文件和需要被调起的Activity, 参考以下配置Scheme
html
<application android:icon="@mipmap/app_icon" android:label="@string/app_name" android:theme="@style/UnityThemeSelector" android:extractNativeLibs="true">
<meta-data android:name="cn.apptrace.APP_KEY" android:value="AppTrace平台分配的appKey" />
<meta-data android:name="unity.splash-mode" android:value="0" />
<meta-data android:name="unity.splash-enable" android:value="True" />
<meta-data android:name="unity.launch-fullscreen" android:value="True" />
<meta-data android:name="notch.config" android:value="portrait|landscape" />
<meta-data android:name="unity.auto-report-fully-drawn" android:value="true" />
<activity android:name="cn.apptrace.unity.ApptraceActivity" android:exported="true" android:launchMode="singleTask" android:screenOrientation="landscape" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|layoutDirection|fontScale" android:label="@string/app_name">
<intent-filter>
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.MAIN" />
</intent-filter>
<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="AppTrace分配的Scheme" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
<meta-data android:name="notch_support" android:value="true" />
</activity>
</application>
2.3 代码集成
Android集成
java
public class ApptraceActivity extends UnityPlayerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ApptraceBridge.startInit(this, true);
ApptraceBridge.getWakeUp(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
ApptraceBridge.getWakeUp(intent);
}
}
iOS集成
objectivec
@interface ApptraceController : UnityAppController<AppDelegateListener>
@end
IMPL_APP_CONTROLLER_SUBCLASS(ApptraceController)
@implementation ApptraceController
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
UnityRegisterAppDelegateListener(self);
[super application:application didFinishLaunchingWithOptions:launchOptions];
// 初始化sdk
[ApptraceBridge startInit];
return YES;
}
// UniversalLink
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
if ([super respondsToSelector:@selector(application:continueUserActivity:restorationHandler:)]
) {
[super application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
}
[ApptraceBridge handleUniversalLink:userActivity];
return YES;
}
@end