По какой-то причине, когда я использую основное действие для обработки ссылок Firebase Dynami c, параметр обработчика PendingDynamicLinkData обнуляется.
Я проверил Intent и при использовании основного представления для обработки URL значение действия - android.intent.action.MAIN
, вместо android.intent.action.VIEW
- действие, используемое для обработки URL-адресов.
Это выглядит так, потому что приложение находится в фоновом режиме, когда пользователь нажимает URL-адрес в браузере, android отправляет действие android.intent.action.MAIN
для активации основного действия, но затем не отправляет android.intent.action.VIEW
в то же действие.
Вот манифест:
<activity
android:name=".ui.activities.NotificationActivity"
android:label="@string/nav_title"
android:parentActivityName=".ui.activities.navigationActivity.NavigationActivity"
android:exported="false"
android:launchMode="singleInstance"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="OPEN_ACTIVITY_NOTIFICATION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:host="mydomain.com" android:scheme="https" />
<data android:host="myfirebasedomain" android:scheme="https"/>
</intent-filter>
Здесь обработчик метода запуска NavitationActivity (такой же, как в этом руководстве ):
FirebaseDynamicLinks.getInstance()
.getDynamicLink(intent)
.addOnSuccessListener(this) { pendingDynamicLinkData ->
// Get deep link from result (may be null if no link is found)
var deepLink: Uri? = null
if (pendingDynamicLinkData != null) {
Log.d(TAG,"Found something")
deepLink = pendingDynamicLinkData.link
}
}
.addOnFailureListener(this) {
e -> Log.w(TAG, "getDynamicLink:addOnFailureListener", e)
}
.addOnCanceledListener(this) {
Log.w(TAG, "getDynamicLink:addOnCanceledListener")
}
Обновление
Манифест был неполным, я пропускаю добавление атрибут android: launchMode = "singleInstance". Кроме того, я обнаружил, что это сопряжение этого атрибута с двумя действиями, Main и View, которые вызывают проблему.
Удаление этого атрибута не является решением для меня, потому что это вызовет другие проблемы.