对于googlePlay的Custom URL
就是googlePlay上APP网址:
https://play.google.com/store/apps/details?id=com.yourapp
如果是国内一些应用,则考虑market://
包名等方式,自行百度。
对于Android URI Scheme
:
首先需要在Manifest xml中定义:
<activity
android:name="com.your.SplashActivity"
...>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- 必须分开。 -->
<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="myapp" android:host="app"/>
</intent-filter>
</activity>
值得一提的是,作为启动应用,你必须分割开两个intent-filter,否则就会导致应用icon不见。而且BROWSABLE必须保证action和2个category。
测试方法
1. 写代码:
startActivity(
Intent(
Intent.ACTION_VIEW,
Uri.parse("myapp://app")
).also { it.flags = it.flags or Intent.FLAG_ACTIVITY_NEW_TASK }
)
2. adb命令:
adb shell am start -W -d "myapp://app"
3. webView支持:
html中添加:
<a href="myapp://app">跳转至MyApp</a>
对于真实的前端配置好以后,使用标准的浏览器去打开,是不会有问题的。
因为它肯定实现了类似下面的代码。
自定义WebView中,点击网页中链接进行跳转,出现err_unknown_url_scheme。
解决办法,给WebViewClient添加如下代码:
public boolean shouldOverrideUrlLoading(WebView view, String url) {
boolean schemeUri = true; //可以额外定制代码,进行判断
return schemeUri && this.overrideUrlLoadUrl(view, url) ? true : super.shouldOverrideUrlLoading(view, url);
}
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String uri = request.getUrl().toString();
boolean schemeUri = true; //可以额外定制代码,进行判断
return schemeUri && !uri.isEmpty() && this.overrideUrlLoadUrl(view, uri) ? true : super.shouldOverrideUrlLoading(view, request);
}
private boolean overrideUrlLoadUrl(WebView view, @NonNull String url) {
if (!url.contains("http://") && !url.contains("https://")) {
BridgeUtil.startActivity(view, url);
return true;
} else {
view.loadUrl(url);
return false;
}
}
static void startActivity(WebView view, @NonNull String url) {
startActivity(view, Uri.parse(url));
}
static void startActivity(WebView view, @NonNull Uri uri) {
Intent intent = new Intent("android.intent.action.VIEW", uri);
try {
view.getContext().startActivity(intent);
} catch (Exception var6) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
view.getContext().startActivity(intent);
} catch (Exception var5) {
Exception e2 = var5;
e2.printStackTrace();
}
}
}
参考:
https://developer.android.com/training/app-links/deep-linking?hl=zh-cn