Branch.io SDK не может инициализироваться при сборке Android в Unity3D - PullRequest
0 голосов
/ 30 апреля 2019

Branch.io SDK для Unity3d не инициализируется при сборке 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>

В результате не работает Deeplink, динамическое создание и совместное использование ссылок не работает, 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 Ответ

0 голосов
/ 30 апреля 2019

Пропущенная строка

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

также для проверки этого вам нужно загрузить приложение в игровой магазин или вы можете использовать команду 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();
        }


    }
...