Skip to content

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