web-dev-qa-db-ja.com

Android iOSのようにアプリを開くためのカスタムURL

たとえば、Webサイトの「navigon://」にリンクを追加して、iOSデバイスでNavigonアプリがインストールされている場合にそれを開くことができます。

Androidで(インストールされていると仮定して)Webサイトからアプリを開く同様の簡単な方法はありますか?

30
MaFt

Androidディープリンク:マニフェストにインテントフィルターを追加する

<activity
Android:name="com.example.Android.GizmosActivity"
Android:label="@string/title_gizmos" >
<intent-filter Android:label="@string/filter_title_viewgizmos">
    <action Android:name="Android.intent.action.VIEW" />
    <category Android:name="Android.intent.category.DEFAULT" />
    <category Android:name="Android.intent.category.BROWSABLE" />
    <!-- Accepts URIs that begin with "http://www.example.com/gizmos” -->
    <data Android:scheme="http"
          Android:Host="www.example.com"
          Android:pathPrefix="/gizmos" />
    <!-- note that the leading "/" is required for pathPrefix-->
    <!-- Accepts URIs that begin with "example://gizmos”
    <data Android:scheme="example"
          Android:Host="gizmos" />
    -->
</intent-filter>

https://developer.Android.com/training/app-indexing/deep-linking.html

20
DeaMon1

Androidで intent filters を確認してください。カテゴリを特別にチェックしてください。

6
Aman Alam

iOSの実装とAndroidモバイルディープリンク について知っておく必要があるすべてを参照してください。これはAndroidおよびiOS。

Deep Links があり、Android 6.0 Android App Links から始まります。後者は開くことを目的としています。たとえば、この検証を使用しない場合、reddit.comは7つのアプリケーションで開くことができます。

enter image description here

必要なすべてのActivityを、それを開くリンクに関連付けることができます。たとえば、https://awesomejobs.com/jobs/{id}などのアプリケーションリンクで開く場合、これらの行をAndroidManifest.xmlに追加する必要があります。

<activity Android:name="com.awesomejobsapp.ui.activity.JobActivity">
    <intent-filter>
        <action Android:name="Android.intent.action.VIEW" />

        <category Android:name="Android.intent.category.BROWSABLE"/>
        <category Android:name="Android.intent.category.DEFAULT" />

        <data Android:scheme="https"
              Android:Host="awesomejobs.com"
              Android:pathPrefix="/jobs" />
    </intent-filter>
</activity>

次に、JobActivityに書き込みます(ロシア語の article からコードを受け取ります):

@Override
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.ac_job);

   final Intent intent = getIntent();
   final String action = intent.getAction();
   final String data = intent.getDataString();

   if (Intent.ACTION_VIEW.equals(action) && data != null) {
      final String jobId = data.substring(data.lastIndexOf("/") + 1);
      loadJobDetails(jobId);
   }
}
0
CoolMind