LoginSignup
5
2

More than 5 years have passed since last update.

DynamicLinkで起動された画面が「最近使ったアプリ」に残らない

Last updated at Posted at 2017-12-26

注意

この情報は、2017/12/26現在のものです。
最新情報はこちらでご確認下さい。
https://firebase.google.com/support/releases

現象

  • Dynamic Linkで起動された画面がRecentAppsに残らない
    • 起動した画面で直接履歴ボタンを押した場合、OS5は自アプリがいない状態。OS6以降は存在はする
    • 起動した画面でホームボタン押下後やスリープ復帰後、履歴ボタンを押すと、自アプリがいない(OS5~全て共通)
  • アプリをランチャーアイコンから再起動しても残らないまま
  • アプリを設定アプリなどで「強制停止」させた後、再び残るようになる

調べたこと

「アプリ履歴に残さないフラグ」でも付いてんじゃね?
と思って、下記ログを仕込んでみた。

MainActivity.java
FirebaseDynamicLinks.getInstance()
      .getDynamicLink(getIntent())
      .addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
        @Override
        public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
          // Get deep link from result (may be null if no link is found)
          Uri deepLink = null;
          if (pendingDynamicLinkData != null) {
            deepLink = pendingDynamicLinkData.getLink();
          }
          if (deepLink == null) return;

          // Intentフラグを確認するログ
          Intent intent = getIntent();
          if (0 != (intent.getFlags() & Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS)) {
            Log.d("DynamicSample", "intent has Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS");
          }
          Log.d("DynamicSample", "getDynamicLink:onSuccess");
          // Handle the deep link. For example, open the linked
          // content, or apply promotional credit to the user's
          // account.
          // ...
          Log.d("DynamicSample", "getDynamicLink:url= " + deepLink.toString());

          // ...
        }
      })
      .addOnFailureListener(this, new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
          Log.d("DynamicSample", "getDynamicLink:onFailure");
          e.printStackTrace();
        }
      });

起動はadbコマンドから。

$ adb shell am start -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d <DYNAMIC_URL>

で、出てきたLogcat.

D/DynamicSample: intent has Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

ビンゴ!

バグなの?仕様なの?

というのは私には分からないので、Firebaseに問い合わせ。
結論。

仕様です。

ということだそうです。

※もしかしたら、adbコマンドで起動しているせいだよ、って言われるかと期待していたのですが、仕様、との回答だったので、adbコマンドで無くても、このフラグを付ける処理がFirebaseのSDK自体に入っているのではと思います。

対処

アプリを強制停止しないかぎり、ずっと残らないままになるのは困るし、ってことで、以下の対応をしました。

  • Dynamic Linkを受け取って対象画面を起動するとき、別プロセスで起動する
    具体的には、Intent.FLAG_ACTIVITY_NEW_DOCUMENTを付けてやった感じです。

  • Dynamic Linkで起動された画面は、finishAndRemoveTask()で終了する

ただ、微妙にOS5と、OS7で挙動が違ったり、一瞬、「最近使ったアプリ」に2つ自アプリが存在したり、いろいろとまだしっくりこない点はありますが、「ずっと残らない」よりはマシだろう、と判断して入れています。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2