私は試しました link1 、 link2 、 link 、 link4 、 link5 、- link6
DeepLinking について説明したすべてがここにあります
私が欲しいのは、カスタムuri myapp:// some_dataで、アプリケーションを初期化するためにsome_dataを必要とするデバイスにインストールされているネイティブアプリケーションを開きます。
カスタムURLをクリックできるシナリオは2つあります。
1)SMSアプリ内から、ユーザーがリンクをタップすると、自動的にインストールされているアプリを開く必要があります。そうでない場合は、アプリがホストされているgoogleplayストアを開きます
2)電子メールメッセージの本文内から。
上記のリンクをすべて試してみましたが、どれもうまくいきません。スキームの部分に大きな問題があります。
これが私のAndroidManifest.xmlです
<?xml version="1.0" encoding="utf-8"?>
<uses-sdk
Android:minSdkVersion="8"
Android:targetSdkVersion="18" />
<application
Android:allowBackup="true"
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
<activity
Android:name="MainActivity"
Android:label="@string/app_name"
Android:exported="true" >
<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="inderbagga" />
</intent-filter>
</activity>
</application>
そして、これがMainActivity.Javaです
TextView tvText=(TextView)findViewById(R.id.tvid);
if (getIntent().getAction() == Intent.ACTION_VIEW&&getIntent().getScheme().equals("inderbagga")) {
Toast.makeText(getApplicationContext(), ""+getIntent().getScheme(), Toast.LENGTH_SHORT).show();
Uri uri = getIntent().getData();
// do stuff with uri
tvText.setText(uri.toString());
}
else tvText.setText("NULL");
具体的には、smsアプリケーションまたはgmail/yahoomailメールメッセージ本文から、inderbagga:// a1b22c333タイプのURLがクリックされたときにネイティブアプリケーションを開きます。
同じことを実現するために、インテントフィルターを使用してスキームを設定しました。およびgetIntent()を使用して、MainActivityのa1b22c333に等しいデータを読み取ります。
リンクをクリックすると、このコードが機能します
<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="domain.com(google.com)"Android:pathPrefix="/wp/poc1/(sufexes)" />
</intent-filter>
uRLデータを取得する
//get uri data
Uri data = getIntent().getData();
//get schma
String scheme = data.getScheme(); // "http"
//get server name
String Host = data.getHost(); // Ipaddress or domain name
//get parameter
String urltextboxname=data.getQueryParameter("name");
//set value in textview
name.setText(urltextboxname);
具体的には、smsアプリケーションまたはgmail/yahoomailメールメッセージ本文から、inderbagga:// a1b22c333タイプのURLがクリックされたときにネイティブアプリケーションを開きます。
Androidで利用できるSMSとメールアプリケーションが多数あります。正確には、inderbagga://a1b22c333
クリック可能なエントリに。これらすべてのアプリのリストを作成し、各開発チームに連絡して、追加するよう依頼することができます。
または、アプリに特定のhttp://
代わりにURL。ユーザーにはセレクターが表示されますが、アプリまたはWebブラウザーでそのURLを表示するには、少なくともクリック可能です。
また、ディープリンクの宣言と必要なパラメーターの抽出を容易にするこのライブラリを試してみることもできます。
https://github.com/airbnb/DeepLinkDispatch
これにより、自分で構文解析を行うことなく、関心のあるURIと注釈を通じて抽出したいパラメータを宣言できます。
あなたが抱えている問題は、メールとSMSクライアントがURIスキームとパスを正しく解析していないことです。ほとんどの場合、URIスキームに直接入力することはできません。アプリがインストールされていない場合は、ユーザーに優れたエクスペリエンスを提供するために、Playストアにフォールバックする必要があります。
これを行うには、クライアント側のJSでURIスキームを呼び出す必要があります。簡単なWebホストをセットアップして、次のスクリプトを使用できます。
<script type="text/javascript">
window.onload = function() {
var method = 'iframe';
var fallbackFunction = function() {
if (method == 'iframe') {
window.location = "market://details?id=your.package.name";
}
};
var addIFrame = function() {
var iframe = document.createElement("iframe");
iframe.style.border = "none";
iframe.style.width = "1px";
iframe.style.height = "1px";
iframe.src = "inderbagga://a1b22c333";
document.body.appendChild(iframe);
};
var loadChromeIntent = function() {
method = 'intent';
document.location = "intent://a1b22c333#Intent;scheme= inderbagga;package=your.package.name;end";
};
if (navigator.userAgent.match(/Chrome/) && !navigator.userAgent.match("Version/")) {
loadChromeIntent();
}
else if (navigator.userAgent.match(/Firefox/)) {
window.location = "inderbagga://a1b22c333";
}
else {
addIFrame();
}
setTimeout(fallbackFunction, 750);
};
</script>
または、 branch.io のようなサービスを使用して、デスクトップとiOSでの作業に加えて、このクライアント側JSを自動的にアセンブルします。