Branch.io SDK 无法在 Unity3D 中的 Android 构建上初始化

Posted

技术标签:

【中文标题】Branch.io SDK 无法在 Unity3D 中的 Android 构建上初始化【英文标题】:Branch.io SDK can't initialize on Android build in Unity3D 【发布时间】:2019-04-30 02:41:31 【问题描述】:

Unity3d 的 Branch.io sdk 未在 android 版本上初始化。我使用的是深度链接,但正如我通过调试日志看到的那样,它甚至没有在应用程序启动时初始化(通常在 ios 版本中我看到一些日志记录,但 Android 是空的)。我正在使用最新的 Branch.io sdk 和 Unity3d 2018.3.9f1

我意识到资产标准“更新 AndroidManifest”按钮不适用于预制件“BranchPrefab”。那就是什么都不做。我尝试了不同的组合来使用文档(这似乎不是实际的)/示例项目/论坛手动设置清单,但没有结果。 我已经联系了 branch.io 支持,但它们根本没有用。他们为我提供了实际上不起作用的“固定”清单。这里是:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          package="com.myproject.package">

    <uses-permission android:name="android.permission.INTERNET"/>

    <application
            android:name=".SampleBranchApplication"
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">

        <!-- Branch init -->
        <meta-data
                android:name="io.branch.sdk.BranchKey"
                android:value="key_live_my_key_here"/>
        <activity
                android:name=".MainActivity"
                android:label="@string/app_name"
                android:launchMode="singleTask">

            <!-- AppLink example -->
            <!-- Branch App Links (optional) -->
            <intent-filter android:autoVerify="true"
                           tools:targetApi="m">
                <action android:name="android.intent.action.VIEW"/>

                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>

                <data
                        android:host="tdetectives.app.link"
                        android:scheme="https"/>
                <data
                        android:host="tdetectives-alternate.app.link"
                        android:scheme="https"/>
            </intent-filter>

            <!-- Branch URI Scheme -->
            <intent-filter>
                <data
                        android:host="open"
                        android:scheme="tdetectives"/>
                <action android:name="android.intent.action.VIEW"/>

                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="android.intent.category.BROWSABLE"/>
            </intent-filter>

            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>

        <!-- Branch install referrer tracking (optional) -->
        <receiver
                android:name="io.branch.referral.InstallListener"
                android:exported="true">
            <intent-filter>
                <action android:name="com.android.vending.INSTALL_REFERRER"/>
            </intent-filter>
        </receiver>
    </application>
</manifest>

因此深度链接不起作用,动态链接创建和共享也不起作用,sdk 未初始化...

更新 花了几个小时后,我发现分支 sdk 没有将它的清单合并到主清单,这就是没有加载资源的原因。似乎这仅在根本没有主要清单时才有效。 在做了一个技巧自动清单更新后:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.myapp.app" android:versionCode="1" android:versionName="1.0">
  <application android:label="@string/app_name" android:icon="@drawable/app_icon" android:name="io.branch.unity.BranchUnityApp">
    <!-- The MessagingUnityPlayerActivity is a class that extends
         UnityPlayerActivity to work around a known issue when receiving
         notification data payloads in the background. -->
    <activity android:name="com.google.firebase.MessagingUnityPlayerActivity" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
      <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
    </activity>
    <activity android:name=".MainActivity" android:label="@string/app_name" android:launchMode="singleTask">
      <intent-filter>
        <data android:host="open" android:scheme="myAppUrlScheme" />
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
      </intent-filter>
      <intent-filter android:autoVerify="true">
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="https" android:host="myapp.app.link" />
        <data android:scheme="https" android:host="myapp-alternate.app.link" />
      </intent-filter>
    </activity>
    <service android:name="com.google.firebase.messaging.MessageForwardingService" android:exported="false" />
    <meta-data android:name="io.branch.sdk.TestMode" android:value="false" />
    <meta-data android:name="io.branch.sdk.BranchKey" android:value="key_live_my_key" />
  </application>
  <uses-permission android:name="android.permission.INTERNET" />
</manifest>```

For now branch sdk initialise well, deeplink sharing works, but not the opening the app by deeplink click. So, if the app is running in background and I click the deeplink app just restarts without providing the parameters. If app is closed, that just do nothing (app attempts to start, but stacks)

Seems there is some conflict with activities from Firebase Messaging. I am not good with that, may be I am wrong.

Any suggestions?

【问题讨论】:

你如何测试这个? 许多测试方法,但通常我会收到带有参数的调试日志。如果应用程序不是通过深层链接单击打开的,则只有空字典。另一种方法是尝试共享深层链接 - 如果分支未初始化,它将被停止。 【参考方案1】:

缺少一行

  <meta-data
            android:name="io.branch.sdk.TestMode"
            android:value="false" /> <!-- Set to true to use Branch_Test_Key -->

同样为了测试这个你需要在 Play 商店上传应用或者你可以使用 adb 命令

adb shell am broadcast -a com.android.vending.INSTALL_REFERRER -n <PackageName>/io.branch.referral.InstallListener --es "referrer " "utm_source%3DFacebook"

第一次活动

@Override
    protected void onStart() 
        super.onStart();
        try 
            // Branch init
            Branch.getInstance().initSession(new Branch.BranchReferralInitListener() 
                @Override
                public void onInitFinished(JSONObject referringParams, BranchError error) 
                    if (error == null) 
                        Log.i("BRANCH SDK", referringParams.toString());
                     else 
                        Log.i("BRANCH SDK", error.getMessage());
                    
                
            , this.getIntent().getData(), this);
         catch (
                Exception e) 
            e.printStackTrace();
        


    

【讨论】:

刚刚向主线程文本添加了新的更新。这条线现在存在。

以上是关于Branch.io SDK 无法在 Unity3D 中的 Android 构建上初始化的主要内容,如果未能解决你的问题,请参考以下文章

在 branch.io SDK 中找不到推荐部分

使用 expo branch.io SDK 和广告合作伙伴链接安装归因

Branch.io Cordova SDK 不生成链接

branch.io swift中的共享表选项

branch.io 共享表问题

无法在 branch.io 上查看自定义事件