ndroid正确使用Scheme协议打开

北京白癜风治疗的好医院 https://yyk.39.net/hospital/89ac7_knowledges.html

Android正确使用Scheme协议打开App,兼容浏览器scheme的二次跳转

URLScheme

URLScheme是一种页面内跳转协议,通过定义自己的URLScheme协议,可以实现

从一个APP中打开另外一个APP指定的页面

从H5页面中跳转到APP指定的页面(实际上就是从一个浏览器中的一个页面跳转到APP指定页面)。

URLScheme协议格式:

一个完整的完整的URLScheme协议格式由scheme、host、port、path和query组成,其结构如下所示:

scheme://host:port/path?query

如下就是一个自定义的URL

openapp://hhong:80/product?productId=

openapp:即Scheme该Scheme协议名称(必填)

hhong:即Host,代表Scheme作用于哪个地址域(必填)

80:即port,代表端口号

product:即path,代表打开的页面

param:即query,代表传递的参数

传递参数的方法跟web端一样,通过问号?分隔,参数名和值之间使用等号=连接,多个参数之间使用拼接。

Scheme使用

既然我们使用scheme来做打开app并跳转的逻辑,那这个scheme应该声明在哪里比较合适呢?如果你的应用在启动页(splash)或者在主界面(main)初始化了一些必要的设置,比如必要的token信息检查交易或者一些其它校验等,没有这些信息会造成崩溃的,这个时候我们就需要在启动页来声明这个scheme了,获取scheme信息保存起来,然后在主界面做处理逻辑,如跳转到其它界面等。当然你也可以声明scheme在其它地方,具体得需要看怎么实现业务比较方便。

如配置SplashActivity完整的打开链接为openapp://hhong:80/product?param=,需要在AndroidManifest.xml配置(SplashActivity启动模式为默认standard模式)

activityandroid:name=".SplashActivity"intent-filteractionandroid:name="android.intent.action.MAIN"/categoryandroid:name="android.intent.category.LAUNCHER"//intent-filterintent-filter!--必须设置--actionandroid:name="android.intent.action.VIEW"/categoryandroid:name="android.intent.category.DEFAULT"/!--需要被网页拉起必须设置--categoryandroid:name="android.intent.category.BROWSABLE"/!--协议部分--dataandroid:host="hhong"android:path="/product"android:port="80"android:scheme="openapp"//intent-filter/activity

定义好scheme相关的参数后,现在我们需要用scheme调起目标app,主要有两种方式

APP中打开另一个APP指定的页面

Stringurl="openapp://hhong:80/product?productId=";Intentintent=newIntent(Intent.ACTION_VIEW,Uri.parse(url));//intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);StringintentUri=intent.toUri(Intent.URI_INTENT_SCHEME);Log.e(TAG,"action是:"+intentUri);startActivity(intent);

这种方式的跳转比较简单,也是最不容易出错的。

浏览器中的一个页面跳转到APP指定页面

这种方式的跳转可能同样的代码会导致不同的结果,因为涉及到浏览器,而不同的手机厂商不能保证所有的浏览器内核是一样的,进而可能对scheme的处理也是不一样。

前提:项目用的框架是蚂蚁的MPASS,这个项目可能和正常工程项目不同,因为框架对项目的启动方式做了封装,有兴趣的同学也可以去看下这个框架。

问题:app未启动时,由



转载请注明地址:http://www.wawayuz.com/nwfz/538374.html
  • 上一篇文章:
  • 下一篇文章: