利用Scheme 启动APP
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用Scheme 启动APP相关的知识,希望对你有一定的参考价值。
参考技术A 苹果利用url的scheme在系统内部定位应用。so,我们可以为自己应用注册一个scheme供其他应用打开。例如:现有两个APP,APP1,APP2,在APP1中打开APP2,其实只需以下步骤就可以实现这以简单功能,
identifier: 命名方式为反域名格式
scheme: 应用自身的scheme,供其他应用使用
注:当系统内部应用的scheme相同时,后安装的应用会被打开,因为后安装的scheme会覆盖现在安装的应用的scheme
我们将identifier填入:com.21g.test 将schemes填入:APP2
例:
注:因为ios 9限制了http的访问,所以要讲scheme加入白名单
当app2被其他应用打开的时候,会在APPDelegate中触发下列方法(iOS9.0以后):
当一个应用定义多个Scheme时,例如:
我们可以在代理方法中获取URL,根据url判断,处理不同的操作。
外部网页跳转Android APP-Scheme协议详细介绍
1.URL Scheme使用场景介绍
1.1 URL Scheme使用场景,目前1,2,5使用场景很广,有没有一种熟悉的感觉?
1.通过小程序,利用Scheme协议打开原生app
2.H5页面点击锚点,根据锚点具体跳转路径APP端跳转具体的页面
3.APP端收到服务器端下发的PUSH通知栏消息,根据消息的点击跳转路径跳转相关页面
4.APP根据URL跳转到另外一个APP指定页面
5.通过短信息中的url打开原生app
2.URL Scheme基础介绍
2.1 什么是URL Scheme?
android中的scheme是一种页面内跳转协议,是一种非常好的实现机制,通过定义自己的scheme协议,可以非常方便跳转app中的各个页面
2.2 URL Scheme协议格式
String urlStr="http://www.ycbjie.cn:80/yc?id=hello&name=cg";
//url = protocol + authority(host + port) + path + query
//协议protocol= http
//域名authority= www.ycbjie.cn:80
//页面path= /yc
//参数query= id=hello&name=cg
//authority = host + port
//主机host= www.ycbjie.cn
//端口port= 80
2.3 Scheme链接格式样式
样式:[scheme]://[host]/[path]?[query]
3.URL Scheme如何使用
3.1 设置Scheme
在AndroidManifest.xml中对标签增加设置Scheme
<activity
android:name=".ui.main.ui.activity.SchemeFirstActivity"
android:screenOrientation="portrait">
<!--Android 接收外部跳转过滤器-->
<!--要想在别的App上能成功调起App,必须添加intent过滤器-->
<intent-filter>
<!-- 协议部分配置 ,注意需要跟web配置相同-->
<!--协议部分,随便设置 yc://ycbjie:8888/from?type=yangchong -->
<data android:scheme="yc"
android:host="ycbjie"
android:path="/from"
android:port="8888"/>
<!--下面这几行也必须得设置-->
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
</activity>
3.2 获取Scheme跳转的参数,并添加跳转方式
public class SchemeFirstActivity extends AppCompatActivity
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
super.onCreate(savedInstanceState);
Uri uri = getIntent().getData();
if (uri != null)
//获取指定参数值
String type = uri.getQueryParameter("type");
Log.e( "UrlUtils","main: " + type);
if(type.equals("yangchong"))
ActivityUtils.startActivity(GuideActivity.class);
else if(type.equals("main"))
ActivityUtils.startActivity(MainActivity.class);
finish();
3.3 调用方式
3.3.1 原生调用
Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("yc://ycbjie:8888/from?type=yangchong"));
startActivity(intent);
3.3.2 网页调用
<a href="yc://ycbjie:8888/from?type=yangchong">打开叮咚app</a>
3.3.3 短信息中调用
3.4 如何判断一个Scheme是否有效
PackageManager packageManager = getPackageManager();
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("yc://ycbjie:8888/from?type=yangchong"));
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
boolean isValid = !activities.isEmpty();
if (isValid)
startActivity(intent);
3.5 Scheme在短信息中注意要点
设置android:scheme="http"或者android:scheme="https"后,点击短信息或者h5页面,发现没有跳到指定的页面,反而打开的是网页链接。
以上是关于利用Scheme 启动APP的主要内容,如果未能解决你的问题,请参考以下文章