https://developer.Android.com/training/app-indexing/deep-linking.html の説明に従いましたが、adb
を使用してインテントをトリガーしたい場合:
adb Shell am start
-W -a Android.intent.action.BROWSEABLE
-d "http://example.com/gizmos" com.myapp.Android
私はちょうど得る
Error: Activity not started, unable to resolve Intent { act=Android.intent.action.VIEW dat=example://gizmos flg=0x10000000 pkg=com.myapp.Android }
<activity
Android:name=".activities.DeepLinkActivity"
Android:label="@string/title_activity_deep_link">
<meta-data
Android:name="Android.app.searchable"
Android:resource="@xml/searchable" />
<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"
Android:Host="example.com"
Android:pathPrefix="/gizmos" />
</intent-filter>
</activity>
明らかな間違いを犯しましたか?
編集:
まず、パッケージがadbで到達可能であることを確認します。
adb Shell am start -n com.example.simon.test/.activities.MainActivity
次に、複数のデータタグを受け入れるには、異なるインテントフィルターが必要です(これは、ネットで見た他のすべての例とは異なり、それが私にとって機能する方法です)。例えば。:
<intent-filter>
...
<data Android:scheme="http"
Android:Host="example.com"/>
</intent-filter>
<intent-filter>
...
<data Android:scheme="http"
Android:Host="example.com"
Android:pathPrefix="/gizmos"/>
</intent-filter>
[〜#〜] note [〜#〜]上記の例では、pathPrefixはフォワードスラッシュで始まります。
Googleのドキュメントがなぜ誤解を招くのか、あるいはそれがadbのいくつかの異なるバージョンにあったのかはわかりませんが、上記の変更は完全に機能しました。これは助けました: ソース
これは、Chromeブラウザが特定のリンクをアプリにルーティングする方法です。
<activity
Android:name=".activities.DeepLinkActivity"
Android:label="@string/app_name">
<!-- Accept chrome links -->
<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"
Android:Host="example.com"
Android:pathPrefix="/"/>
</intent-filter>
<!-- Accept adb data flag -->
<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"
Android:Host="example.com"/>
</intent-filter>
</activity>
[〜#〜] note [〜#〜]1番目のフィルタはGoogleで動作しますChrome 2番目のフィルタは動作しますADBで。
NOTE2ブラウザのアドレスバーにリンクが入力された場合、アプリ選択メニューは表示されません。 Ithasは<a href="http://example.com"></a>
サイドページのリンク。
私の意見では、ここのすべてはかなりぼやけており、実際にすべてが機能することを期待した方法ではありません。しかし、それは私のデバイスでどのように機能するかです。これがあなたにも役立つことを願っています。
いくつかのテストの後、これは私のために働いたものです:
<activity Android:name=".activities.MainActivity">
<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"
Android:Host="www.example.com"
Android:pathPrefix=""
/>
<data Android:scheme="myschema"
Android:Host="example"
Android:pathPrefix=""
/>
</intent-filter>
</activity>
これは、ブラウザで「 http://www.example.com 」、「 http://www.example.com/ 」などのリンクをクリックすると機能します。 " http://www.example.com/whatever "。 「myschema:// example/whatever」でも同じです。
このコマンドを使用してadb
でも動作します(これらのURLのいずれかを使用):
adb Shell am start -W -a Android.intent.action.VIEW -d "http://www.example.com" com.example
始めるのに役立つことを願っています。
すべてが機能している場合は、おそらく、さまざまなアクティビティに対して異なるpathPrefix
を設定する必要があります。
私の場合、メインランチャーでもあるMainActivityにディープリンクインテントフィルターを配置していました。それが問題を引き起こしました。
別のアクティビティを作成し、そこにインテントフィルターを配置すると、問題は解決しました。これが同じ問題に直面している他の人を助けることができることを願っています。
URLが次の形式になっていることを確認してください(大文字を独自の文字に置き換えます)。
Android-app://COM.YOUR.APP.IDENTIFIER/SCHEME/HOST?somegetparams
Adbツールはこの形式を必要としません。上記を使用して、次のようにsrcまたはhrefに配置できます。
<iframe src="Android-app://COM.YOUR.APP.IDENTIFIER/SCHEME/HOST?somegetparams"> </iframe>
<a href="Android-app://COM.YOUR.APP.IDENTIFIER/SCHEME/HOST?somegetparams">LINK</a>
まず、このページの@ user3249477の回答を読んでください。
私は彼が書いたものの代わりにそれを追加したかった、あなたはpathPatternを使用してそれを凝縮することができます:
<activity
Android:name=".activities.DeepLinkActivity"
Android:label="@string/app_name">
<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"
Android:Host="example.com"
Android:pathPattern=".*"/>
</intent-filter>
</activity>
「。*」は空の文字列と「/」の両方に一致するため、両方のケースがカバーされます。複数のスキームとホストを処理しようとする場合、これは特に重要になるため、{http、https} X {""、 "/"} X {"foo"、 "bar"のパワーセットをスパムする必要はありません。など}
./adb Shell am start -n packagename/.splash.SplashActivity -d "schemeName:// content"
Adb Shell am start -W -a Android.intent.action.VIEW -d " http://example.com/gizmos " com.myapp.Androidを使用します。
それが動作します。
私の場合、URLにポート8075があり、それを削除して機能しました
許可の問題がない場合は、おそらくAPIレベルに関連しています
あなたの応答にSimasに感謝します。いくつかの説明を追加したいと思います。
このコマンドでアクティビティをテストした後:
adb Shell am start -n com.example.simon.test/.activities.MainActivity
インテントフィルターをAndroidManifest.xmlファイルに追加した後、ディープリンクをテストする必要があります(以下の行を参照)。
... ...
したがって、これはテストできるadbコマンドです。
adb Shell am start -W -a Android.intent.action.VIEW -d "http://example.com/gizmos" com.example.packageid
そして
adb Shell am start -W -a Android.intent.action.VIEW -d "http://example.com" com.example.pakageid