Динамические ссылки Firebase не запускают мое приложение в конкретной ситуации

Я сделал динамическую ссылку для пользователей, чтобы поделиться некоторым содержимым в моем приложении.

Ссылка работает, когда я нажимаю ссылку на HTML-странице, используя тэг href на устройстве Android.

Это означает, что если приложение не установлено, перейдите в Play Маркет, а затем откройте приложение, и я могу получить глубокий адрес ссылки.

Но когда ссылка точно такая же в других местах, как facebook messenger или электронная почта и т. Д., Я нажимаю ссылку, тогда она не работает.

Он всегда перенаправляется в Play Store, даже если мое приложение уже установлено.

В чем проблема?

Мой код здесь.

  • .java для получения глубокой ссылки

     GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this, this) .addApi(AppInvite.API) .build(); boolean autoLaunchDeepLink = false; AppInvite.AppInviteApi.getInvitation(mGoogleApiClient, this, autoLaunchDeepLink) .setResultCallback( new ResultCallback<AppInviteInvitationResult>() { @Override public void onResult(@NonNull AppInviteInvitationResult result) { if (result.getStatus().isSuccess()) { // Extract deep link from Intent Intent intent = result.getInvitationIntent(); String deepLink = AppInviteReferral.getDeepLink(intent); Log.e("sf", "### deep link : " + deepLink ); } else { Log.d("asdf", "getInvitation: no deep link found."); } } }); 
  • Намеренная часть активности в AndroidManifest.xml

      <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="mycode.app.goo.gl/" android:scheme="https" android:pathPattern=".*" /> </intent-filter> 
  • Динамическая ссылка

    Https://mycode.app.goo.gl/?link= web page address & al = my custom scheme for sharing и apn = имя my android app's package name

Мы внедрили Firebase Dynamic Links в соответствии с этой документацией https://firebase.google.com/docs/dynamic-links/, и они работают правильно во всех случаях, кроме Facebook и Facebook Messenger.

Сначала мы создаем динамическую ссылку на наше приложение:

 Builder builder = new Builder() .scheme("https") .authority("winged-guild-133523.appspot.com") .appendPath("share") .appendQueryParameter("query", query); 

Затем мы создаем длинную динамическую ссылку:

 Builder builder = new Builder() .scheme("https") .authority("zkkf4.app.goo.gl") .appendPath("") .appendQueryParameter("link", deepLink) .appendQueryParameter("apn", "com.mydomain.myapp"); 

Затем мы обмениваемся длинной динамической ссылкой с короткой ссылкой на https://firebasedynamiclinks.googleapis.com/v1/shortLinks и делитесь ею с помощью намерения:

 Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, text); startActivity(Intent.createChooser(intent, null)); 

Если мы поделимся этой ссылкой с помощью приложения Facebook:

  • Короткая ссылка правильно распределена.
  • Если приложение не установлено, нажатие на ссылку в приложении Facebook подходит для Google Play, и после установки приложения глубокая ссылка обрабатывается правильно.
  • Если приложение установлено, нажатие на ссылку в приложении Facebook также относится к Google Play и после нажатия кнопки «Открыть» глубокая ссылка не переносится в приложение, потому что Google Play не передает информацию о реферере в приложение, если установка не Были выполнены.

Если мы разделим эту ссылку с помощью приложения Facebook Messenger:

  • Ссылка используется как https://l.facebook.com/l.php?u=https%3A%2F%2Fwinged-guild-133523.appspot.com%2Fshare%3Fquery%3Dquery&h=fAQEAiTGn&s=1
  • Если приложение установлено, нажатие на ссылку в приложении Facebook Messenger переходит к цели глубокой ссылки (наш сайт) вместо Google Play.
  • Если приложение установлено, щелчок по ссылке в приложении Facebook Messenger правильно открывает приложение.

Поэтому я вижу здесь три проблемы:

  • Приложение Facebook неправильно определяет, что приложение установлено.
  • Приложение Facebook Messenger использует длинную динамическую ссылку вместо короткой.
  • Приложение Facebook Messenger может обнаружить, что приложение установлено, но переходит в ссылку вместо Google Play, если приложение не установлено.

Кто-нибудь знает, что происходит, как решить эти проблемы?

PS: Хотя это не имеет значения, потому что обработка глубоких ссылок в приложении работает должным образом, это наш явный фильтр намерений:

  <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> <intent-filter android:label="@string/app_name"> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:scheme="http"/> <data android:scheme="https"/> <data android:host="winged-guild-133523.appspot.com"/> <data android:host="www.winged-guild-133523.appspot.com"/> <data android:pathPattern="/share.*"/> </intent-filter> 
 //Remove this lines <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE"/> and android:pathPattern=".*" /> //not required remove it also and use android:scheme="http"