iOS 唤起APP之URL Scheme

iOS 唤起APP之URL Scheme,第1张

简单的说,由于苹果选择使用沙盒机制来保障用户的隐私和安全,APP只能访问自己沙盒数据,但同时也阻碍了应用间合理的信息共享。因此苹果提供了一个可以在APP之间跳转的方法: URL Scheme 。如果你的APP需要其他APP访问某些功能或者数据,那么你需要在你的APP定义一个相应的 URL Scheme 。当别的APP使用 URL Scheme 进行访问时,系统会根据 URL Scheme 进行匹配,从而来拉起对应的APP。

如果想要更清晰的认识 URL Scheme 电话,我们需要了解下面几个概念:

这样一对比就容易很明白的理解出了URL Scheme的真正含义,它是为了在iOS系统中定位对应的App然后执行对应的 *** 作,复杂的URL Scheme还可以传递参数。

所以说了那么多,有一种跳转方式可以既满足跳转的动态需求,也可以灵活的传递参数。这种方式就是使用URL Scheme进行动态跳转。这也是我非常推荐的一种使用方式。并且在一些组件化开发的尝试中,这种跳转方式也带来了很多便利。

第三方应用可以通过①给自己发送 URL Scheme 请求来证明没有被劫持,如果没有收到自己的 URL Scheme,就可以及时给用户发送提醒;②利用 MobileCoreServices 服务中的 applicationsAvailableForHandlingURLScheme() 来查看所有注册了该 URL Schemes 的应用和处理顺序,从而检测自己、或者别人的 URL Scheme 是否被劫持。

注册自定义URL Scheme有两种方式

这两种注册方式本质上其实是一样的只是位置不同。

我们需要在APPdelegate中实现相应的代理方法:

iOS 90以下

- (BOOL)application:(UIApplication )application openURL:(NSURL )url sourceApplication:(NSString )sourceApplication annotation:(id)annotation

iOS 90以上

- (BOOL)application:(UIApplication )application openURL:(NSURL )url sourceApplication:(NSString )sourceApplication annotation:(id)annotation;

下面我们通过Safari来验证:

在应用中调用URL Scheme需要是以下方法:

iOS100以下使用该方法:

- (BOOL)openURL:(NSURL)url NS_DEPRECATED_IOS(2_0, 10_0, "Please use openURL:options:completionHandler: instead") NS_EXTENSION_UNAVAILABLE_IOS("");

iOS100以上使用该方法:

- (void)openURL:(NSURL)url options:(NSDictionary<UIApplicationOpenExternalURLOptionsKey, id> )options completionHandler:(void (^ __nullable)(BOOL success))completion NS_AVAILABLE_IOS(10_0) NS_EXTENSION_UNAVAILABLE_IOS("");

还有一个方法可以判断对应URL Scheme是否存在一般和上述方法一起使用:

- (BOOL)canOpenURL:(NSURL )url NS_AVAILABLE_IOS(3_0);

下面来验证一下:

首先在app中设置scheme,如下图所示:

data包含属性如下:

1scheme

2host

3port

4path

5pathPattern

6pathPrefix

7ssp

8sspPattern

9ssPrefix

除了scheme后面的都是可选项。

例如:testscheme://lmcom:8080/mainid=2&name=lbm

lmcom代表是host域名,8080端口号port,main为path,

后面的为query参数。

从h5页通过scheme跳转app方式为:

如图第三个a标签。

只要android中配置的scheme与a标签中的testapp2相同就可以调起。a标签中有域名和端口号,path,和参数。android app中只配置了scheme,只要scheme匹配就可以调起。h5配置的参数也可以在activity中获取。获取方式为:

获取的query就是号后面的参数。如果andrid只配置了schemeh5可以写域名端口好及其他的参数,也能调起。

Android中的自定义的 URL Scheme 是一种页面内跳转协议,也可以被称为 URLRouter ,就是通过类似打开网页的方式去通过路由打开一个Activity,而非直接通过显式Intent方式去进行跳转。这样隐式intent的方法跳转好处如下:

上文已经说过, URL Scheme 是就通过类似打开网页的方式去通过路由打开一个Activity,其协议格式和我们打开网页输入的网址类似。

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

其中scheme既可以是Android中常见的协议,也可以是我们自定义的协议。Android中常见的协议包括content协议、>

{

"timestamp":"2017-09-10",

"apps": [

{

"appId":"590338362",

"appName":"网易云音乐",

"appScheme":"orpheus://"

},

{

"appId":"414478124",

"appName":"微信",

"appScheme":"weixin://"

},

{

"appId":"554499054",

"appName":"滴滴出行",

"appScheme":"diditaxi://"

},

{

"appId":" alipayqr://platformapi/startappsaId=20000056 ",

"appName":"支付宝付款码",

"appScheme":" alipayqr://platformapi/startappsaId=20000056 "

},

{

"appId":"444934666",

"appName":"QQ",

"appScheme":"mqqflyticket://"

},

{

"appId":"414245413",

"appName":"京东",

"appScheme":"openAppjdMobile://"

},

{

"appId":"423084029",

"appName":"美团",

"appScheme":"imeituan://"

},

{

"appId":"547166701",

"appName":"百度网盘",

"appScheme":"baiduyun://"

},

{

"appId":"350962117",

"appName":"新浪微博",

"appScheme":"weibo://"

},

{

"appId":"518966501",

"appName":"天猫",

"appScheme":"tmall://"

},

{

"appId":"1044535426",

"appName":"摩拜单车",

"appScheme":"mobike://"

},

{

"appId":"1056015676",

"appName":"ofo共享单车",

"appScheme":"ofoapp://"

},

{

"appId":"529092160",

"appName":"今日头条",

"appScheme":"snssdk141://"

},

{

"appId":"461703208",

"appName":"高德地图",

"appScheme":"Autonavi://"

},

{

"appId":"425349261",

"appName":"网易新闻",

"appScheme":"newsapp://"

},

{

"appId":"336141475",

"appName":"优酷",

"appScheme":"youku://"

},

{

"appId":"414603431",

"appName":"QQ音乐",

"appScheme":"QQmusic://"

},

{

"appId":"333206289",

"appName":"支付宝",

"appScheme":"alipay://"

},

{

"appId":"466122094",

"appName":"查找朋友",

"appScheme":"findmyfriends://"

},

{

"appId":"432274380",

"appName":"知乎",

"appScheme":"zhihu://"

}

]

}

以上就是关于iOS 唤起APP之URL Scheme全部的内容,包括:iOS 唤起APP之URL Scheme、webview通过app的scheme协议调起app并传递参数、Android 跨应用间调用: URL Scheme等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/9824442.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存