web-dev-qa-db-ja.com

ユーザーにブラウザーとアプリのどちらを選択するかを尋ねずに、リンクからアプリを開く方法。ただアプリをすぐに開くだけです。

私はこれを持っていますintent-filterユーザーがeeexample.comへのリンクをクリックしてアプリを開くたびに欲しい:

<intent-filter>
    <data Android:scheme="http" />
    <data Android:scheme="http" Android:Host="eeexample.com"/>
    <action Android:name="Android.intent.action.VIEW" />
    <category Android:name="Android.intent.category.DEFAULT" />
    <category Android:name="Android.intent.category.BROWSABLE" />
</intent-filter>

ユーザーがGmailアプリでeeexample.comをクリックした場合の例: enter image description here

次に、このリンクをmy appまたはbrowserから開くかどうかをユーザーに尋ねるダイアログを開きます。

enter image description here

しかし、私はユーザーがリンクをクリックしたときにそれが開く[〜#〜]のみ[〜#〜]何も要求せずにアプリが欲しいだけです。または、最悪のシナリオでは、ブラウザではなくAppetitである私のアプリでそれを開くように要求するだけです。これは可能ですか?

更新

したがって、これは App Links で実行できるようですが、APIレベル23(Android 6.0)の場合のみですが、APIレベル15(Android 4.0)の場合はこれが必要ですか?

20
Jeka

明確化ダイアログのバイパスは、Android 6.0 API for App Linking でのみ可能です。

App Linksトレーニングの処理 ごと:

Android 6.0(APIレベル23)以降では、特定の種類のリンクのデフォルトハンドラーとしてアプリを指定できます。ユーザーがアプリをデフォルトのハンドラーにしたくない場合は、Settingsからこの動作をオーバーライドできます。

リンクの自動処理には、アプリ開発者とWebサイト所有者の協力が必要です。開発者は、1つ以上のWebサイトとの関連付けを宣言し、システムにそれらの関連付けを確認するように要求するようにアプリを構成する必要があります。 Webサイトの所有者は、デジタルアセットリンクファイルを公開することにより、その検証を提供する必要があります。

これには、適切な インテントハンドラー の作成と、Android:autoVerify="true"の追加による自動検証の有効化が含まれます。

<activity ...>

  <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="http" Android:Host="www.Android.com" />
    <data Android:scheme="https" Android:Host="www.Android.com" />
  </intent-filter>

</activity>

次に、更新をWebサイト側で Webサイトの関連付けの宣言 によって行う必要があります。これにより、Webサイトの所有者とアプリ開発者の両方が調整して、アプリが自動的にURLスキームのデフォルトになることができるようになります。

8
ianhanniballake

.well-known/assetlinks.jsonがアクセス可能であることを確認するために使用できるいくつかの場所を次に示します。これは、明確化ダイアログを削除するための重要な前提条件です。

https://developers.google.com/digital-asset-links/tools/generator

https://digitalassetlinks.googleapis.com/v1/statements:list?source.web.site=https://YOUR_WEBSITE&relation=delegate_permission/common.handle_all_urls

私の場合については、すべてのチェックにもかかわらず、曖昧性除去ダイアログは消えませんでした。 GitHubのFirebaseUI Auth( https://github.com/firebase/FirebaseUI-Android/tree/master/auth )も使用していて、firebase_web_Host;を使用していることがわかりました。 Android:Hostで定義されている値以外のものが定義されている場合、Android:autoVerifyも失敗します。

問題は、firebase_web_Hostが私のコードの外のどこかに埋め込まれていたため、Android:autoVerifyが失敗した理由が明確ではなかったということです。見つける簡単な方法の1つは、アプリのインストール時にadb logを確認することです。あなたは次のようなものを見るはずです

IntentFilterIntentSvc: Verification .. complete. Success:true. Failed hosts:.

Success:falseが表示されている場合は、どのホストに障害が発生したかが示されているので、どこを見ればよいかがわかります。

2
solamour

あなたがしたすべては正しいです別のWordの「アプリ」サンプルデータでhttpsとhttpを変更するだけですAndroid:scheme = "app" Android:Host = "com" Android:pathPrefix = "/ easy"

httpまたはhttpsは、ブラウザーを実行してから競合を引き起こすことを意味します

1
noyan

あなたのAndroidManife.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:scheme="myAPP" />
</intent-filter>

例えば

 <activity
        Android:name="Activity"
        Android:exported="true"
        Android:windowSoftInputMode="adjustPan">
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />
            <category Android:name="Android.intent.category.DEFAULT" />
            <category Android:name="Android.intent.category.LAUNCHER" />
        </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:scheme="myAPP" />
        </intent-filter>
 </activity>

その後、スキーム「myAPP」のURLをクリックすると、アプリケーションが開きます。ユーザーリクエストはありません。

たとえばURL

myAPP://yoursite.com

myAPP://any.site.com

0
Iman mirzaei