Android深层链接问题! 如何使用Custom Url scheme myapp:// some_data

我试过link1 , link2 , link3 , link4 , link5 , link6

以下介绍有关DeepLinking的所有内容

我想要的是自定义uri myapp:// some_data,打开需要some_data初始化应用程序的设备中安装的本机应用程序。

有两种情况下可以点击自定义url。

1)从短信应用内,当用户点击链接时,它应该自动打开安装,否则打开该应用程序托pipe的谷歌播放存储

2)从电子邮件正文内。

我已经尝试了所有上面列出的链接,但没有一个为我工作。 我在scheme部分有重大问题。

这是我的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"); 

更具体地说,我想打开本地应用程序,当你点击typesinderbagga:// a1b22c333 url,无论是从短信应用程序或gmail / yahoomail电子邮件正文。

为了达到相同的目的,我使用了意图filter来设置scheme。 和getIntent()读取MainActivity中等于a1b22c333的数据。

Solutions Collecting From Web of "Android深层链接问题! 如何使用Custom Url scheme myapp:// some_data"

点击链接意味着这个代码将起作用

  <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); 

更具体地说,我想打开本地应用程序,当你点击typesinderbagga:// a1b22c333 url,无论是从短信应用程序或gmail / yahoomail电子邮件正文。

有很多短信和电子邮件应用程序可用于Android。 他们inderbagga://a1b22c333没有一个知道将inderbagga://a1b22c333转换为可点击的条目。 您可以build立所有这些应用程序的列表,联系他们的每个开发团队,并要求他们添加它。

或者,您可以让您的应用程序监视特定的http:// URL。 虽然用户将看到一个select器,要在您的应用程序或Web浏览器中查看该URL,至less可以点击。

你可能也想试试这个库,这有助于声明深层链接并提取出你需要的参数:

https://github.com/airbnb/DeepLinkDispatch

它允许你声明你感兴趣的URI和你想通过注释提取的参数,而不必自己进行parsing。

它看起来像你遇到的问题是你的电子邮件和短信客户端没有正确parsing的URIscheme和path。 大多数不允许你直接inputURIscheme。 此外,如果应用程序未安装,则需要备份到Play商店,以便用户获得良好的体验。

为了做到这一点,你需要调用客户端JS的URIscheme。 你可以设置一个简单的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。