Open9

Android版ディスコードでリンクを踏んだ際の挙動が少し変なような気がする話

pecopeco

インテントを送信する際のブラウザ判定がなにかおかしい?
アプリでひらきたいのに開けない

Android12以降で確認
11以前は不明
何か情報持ってる方がいたら気軽に教えていただけるとうれしいです

pecopeco

このようなintent-filterを定義しても開けずにChromeなどのデフォルトブラウザが開かれる

<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:scheme="http" />
    <data android:scheme="https" />
    <data android:host="example.com" />
    <data android:pathPrefix="/*" />
 </intent-filter>
pecopeco

PlayStore上のアプリで確認してみる

TwitterYoutubeなど一部アプリは正常にアプリが開かれた
しかし、imgurniconicoなど少なくはないアプリケーションではデフォルトブラウザが開かれてしまった

pecopeco

整理

  • ニコニコがうまくいかないのでアプリ認証が原因ではない
  • 大手と言えるようなサイトのアプリでも同様の症状が起きる
pecopeco

package名が指定されているような気がする
一致パッケージがない場合デフォルトブラウザ(category.APP_BROWSER)で開く?🤔

pecopeco
  • TwitterやYoutubeなどは『デフォルトで開く』をオフにしても開かれる
    • packageが指定されている?
  • インテント内容はandroid.intent.action.VIEW,scheme=https,FLAG_ACTIVITY_NEW_TASK
    • カテゴリ指定で弾かれていそう
pecopeco

以下のようにして試してみる

<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:scheme="http" />
    <data android:scheme="https" />
    <data android:host="example.com" />
    <data android:pathPrefix="/*" />
 </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" />
    <category android:name="android.intent.category.APP_BROWSER" />
    <data android:scheme="http" />
    <data android:scheme="https" />
    <data android:host="example.com" />
    <data android:pathPrefix="/*" />
 </intent-filter>