我尝试了link1,link2,link3,link4,link5,link6
以下是关于DeepLinking
的所有内容我想要的是自定义uri myapp:// some_data,打开设备中安装的本机应用程序,需要some_data来初始化应用程序。
有两种情况可以点击自定义网址。
1)在短信应用中,当用户点击链接时,它应自动打开已安装的,否则打开应用程序所在的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");
更具体地说,我想在点击inderbagga:// a1b22c333类型的u url时打开本机应用程序,无论是来自短信应用程序还是gmail / yahoomail电子邮件正文。
为了达到同样的目的,我使用了意图过滤器来设置方案。和getIntent()读取MainActivity中等于a1b22c333的数据。
答案 0 :(得分:16)
点击链接表示此代码可以使用
<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>
获取网址数据
//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);
答案 1 :(得分:9)
更具体地说,我想在点击inderbagga:// a1b22c333类型的u url时打开本机应用程序,无论是来自短信应用程序还是gmail / yahoomail电子邮件正文。
有许多适用于Android的短信和电子邮件应用程序。确切地说,没有人知道将inderbagga://a1b22c333
转换为可点击的条目。您可以构建所有这些应用程序的列表,联系每个开发团队,并要求他们添加它。
或者,您可以让您的应用关注特定的http://
网址。虽然会向用户显示选择器,但要在您的应用程序或Web浏览器中查看该URL,至少它是可点击的。
答案 2 :(得分:2)
您可能还想试用这个库,这有助于声明深层链接并提取您需要的参数:
https://github.com/airbnb/DeepLinkDispatch
它允许您声明您感兴趣的URI以及您希望通过注释提取的参数,而无需自己进行解析。
答案 3 :(得分:0)
看起来您遇到的问题是您的电子邮件和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。
答案 4 :(得分:0)
根据我的知识和阅读所有答案和评论后,我理解的东西很少。
实施深层链接
OP 的 AndroidManifest.xml
实现是正确的。添加 <data android:scheme="inderbagga" />
将为所有以“inderbagga”开头的 URL 添加深层链接。所以 inderbagga://something.com
会起作用。
测试深层链接
不要通过点击 SMS 应用程序上的链接来测试您的实现,而是尝试遵循 Android Deeplink documentation 中提到的这个 ADB 命令。
$ adb shell am start
-W -a android.intent.action.VIEW
-d <URI> <PACKAGE>
为什么在浏览器/短信上测试链接可能不起作用?
根据我的经验,大多数聊天应用程序(包括 WhatsApp)都不会将自定义架构 URL 转换为可点击的链接。此外,在 Gmail 上发送自定义架构 URL 也不起作用。此外,在 Google Chrome (Android) 上输入 inderbagga://something.com
将执行 Google 搜索,而不是向您的应用发送意图。
那有什么用?