即学即用- URL Scheme、Universal Links

即学即用- URL Scheme、Universal Links,第1张

首发地址

前言

在实际开发过程中,我们常会遇到微信分享、QQ分享、微博分享、微信支付、支付宝支付等诸如此类的需要唤醒第三方App的需求。但是在接入这些第三方SDK时,常见的两种手段,一种是使用URL Scheme,另外一种是使用Universal Links。

本文主要达到的目的:

了解 URL Scheme和 Universal Link正确配置配置 URL Scheme,并使用 URL Scheme 唤醒第三方App正确配置 Universal Links,并使用 Universal Links 唤醒第三方App 正文 URL Scheme

iOS 开发者都清楚一个概念,叫做沙盒机制,所以 APP 不能直接跨越自己的区域去访问别的存储空间的内容,但是在实际开发过程中,我们又不能完全避免去与其他 APP进行通信,所以long long ago,苹果就推出了一种方式叫做 URL Scheme来完成这一通信。

相关术语

CFBundleURLType, 表示当前 App 的 scheme 记录,通过 scheme 可以在其他 App 中打开当前 App。

LSApplicationQueriesSchemes, 这个字段是在iOS 9更细系统策略的时候被引入的,即 App 的白名单,主要用于限制 schemes 协议的访问。

以上两个字段,是使用 URL Scheme 的核心。CFBundleURLType字端用于声明别人唤醒我们自己 App 的 scheme,LSApplicationQueriesSchemes字端用于声明我们想要唤醒的 App 的 scheme。

配置 URL Scheme

Info.plist文件中添加,设置我们自己的URL Scheme,

测试时,我填写的 URL Scheme 为 “iOSKateDev”。

将我们添加的 URL Scheme 输入到 Safari 中(即在浏览器地址中输入: iOSKateDev:// ),校验我们的URL Scheme是否添加成功,打开如下图,即表示设置成功了。

做到这一步的话,如果我们只是想让第三方 App 打开或访问我们的 App 的话,这时候就可以把我们设置好的 URL Scheme 交给第三方 App了。如果还想打开或者访问别人的 App 的话,就需要继续下一步。

将我们想要访问的或者打开第三方 App,那么我们就需要在Info.plist中继续添加LSApplicationQueriesSchemes,并设置第三方 App 的 URL Scheme。如下图:

上图中添加的是微信的 URL Scheme。

既然添加成功了,我们可以使用以下 API 来测试是否能正常打开。

UIApplication.shared.open(URL(string: "wechat://")!, options: [:], completionHandler: **nil**)
功成 常使用的URL Scheme
LSApplicationQueriesSchemes


wechat
weixin
weixinULAPI


mqqopensdklaunchminiapp
mqqopensdkminiapp
mqqapi
mqq
mqqOpensdkSSoLogin
mqqconnect
mqqopensdkdataline
mqqopensdkgrouptribeshare
mqqopensdkfriend
mqqopensdkapi
mqqopensdkapiV2
mqqopensdkapiV3
mqqopensdkapiV4
mqzoneopensdk
wtloginmqq
wtloginmqq2
mqqwpa
mqzone
mqzonev2
mqzoneshare
wtloginqzone
mqzonewx
mqzoneopensdkapiV2
mqzoneopensdkapi19
mqzoneopensdkapi
mqqbrowser
mttbrowser
tim
timapi
timopensdkfriend
timwpa
timgamebindinggroup
timapiwallet
timOpensdkSSoLogin
wtlogintim
timopensdkgrouptribeshare
timopensdkapiV4
timgamebindinggroup
timopensdkdataline
wtlogintimV1
timapiV1


sinaweibohd
sinaweibo
sinaweibosso
weibosdk
weibosdk2.5



alipay
alipayshare


dingtalk
dingtalk-open


wxwork
wxworkdebug
wxworkrdm
wxworkrelease


douyinopensdk
douyinsharesdk
snssdk1128


linkedin
linkedin-sdk2
linkedin-sdk


yixin
yixinopenapi


instagram


whatsapp


line


fbapi
fb-messenger-api
fb-messenger-share-api
fbauth2
fbshareextension




kakaofa63a0b2356e923f3edd6512d531f546
kakaokompassauth
storykompassauth
kakaolink
kakaotalk-4.5.0
kakaostory-2.9.0


pinterestsdk.v1


tumblr


evernote
en
enx
evernotecid
evernotemsg


youdaonote
ynotedictfav
com.youdao.note.todayViewNote
ynotesharesdk


gplus


pocket
readitlater
pocket-oauth-v1
fb131450656879143
en-readitlater-5776
com.ideashower.ReadItLaterPro3
com.ideashower.ReadItLaterPro
com.ideashower.ReadItLaterProAlpha
com.ideashower.ReadItLaterProEnterprise


vk
vk-share
vkauthorize


twitter
twitterauth


常见问题

控制台报错: error: "This app is not allowed to query for scheme xxxx"

解决方案:检查 LSApplicationQueriesSchemes中是否正确添加要打开的 App 的 Scheme。

URL SchemeLSApplicationQueriesSchemes都正确配置了,依旧打不开想要打开的第三方 App?

解决方案:

检查两个字端是否真的正确配置了,例如把想打开的第三方 App 的 Scheme 设置到了URL Types中;由于URL Scheme是自定义的协议,所以可能有两个或者多个 App 的 Scheme 设置的一样,这时候根据系统的规则,它会打开最先安装的那个;

当第三方 App 想打开我们的 App,并且向我们 App,传递一些参数时,我们怎么接收这些参数?

解决方案:常见的 URL Scheme 传值,会这么使用:“scheme://parameter=xxx”。我们在 AppDelegate 的如下方法中获取对应参数。

optional func application( _ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool
Universal Links

Universal Link 是苹果公司在 WWDC 上提出的iOS 9 的新特性之一。Universal Link类似于深层链接,能够方便的通过打开一个HTTPS链接来直接启动您的客户端应用。

以下是苹果对它介绍:

Seamlessly link to content inside your app, or on your website in iOS 9 or later. With universal links, you can always give users the most integrated mobile experience, even when your app isn’t installed on their device.

配置 Universal Link

将域名添加SSL证书;

为需要被打开App添加Associated Domains,如下图:

以上的截图是用 Xcode 自动管理证书的 *** 作流程。

准备一个apple-app-site-association的文件,文件格式如下:
{
 "applinks": {
 "apps": [],
 "details": [
     {
         "appID": "9JA89QQLNQ.com.apple.wwdc",
         "paths": [ "/wwdc/news/", "/videos/wwdc/2015/*"]

     },
     {
         "appID": "ABCD1234.com.apple.wwdc",
         "paths": [ "*" ]
     }
     ]
 }
}

该文件的主要内容在于details字段中,这个字段对应的是一个列表,列表中每个对象都描述了可以使用通用链接的 App (即appID字段),以及 App 支持的路径列表(paths字段)。

appID字段的规则为:teamID + “.” + Bundle id

path字端的规则为:* 表示 通配符,只要在该文件所在域名之下的所有地址,均可通过通用链接唤醒 App。建议不直接使用域名 + 通配符来设置 App 支持的路径。

注意: 该文件的文件名不要有后缀名。

将编辑好的apple-app-site-association文件上传到域名的根目录或者 .well-known目录下(苹果建议是 .well-known目录)。

回到 Xcode 中,使用已在apple-app-site-association文件中注册的路径来填写, *** 作如下:

注意: 填写的内容是: “applinks:”+域名+已注册的路径,不需要填写 https。如:

applinks:help.wechat.com/app/

检验 Universal Link 是否正常

常见检验方案有如下几种:

将 Universal Link 复制到备忘录中,查看长按的显示内容,如果出现在XX中打开,即正常。如下图,使用微信的 Universal Link,长按会显示【在"微信"中打开】。

在 Safari 中输入 Universal Link,查看显示内容,如出现是否打开XX入口,即正常,如下图,仍是使用微信的 Universal Link举例,会显示【在"微信"应用中打开】

使用苹果提供的测试工具,苹果官方提供的测试工具地址

检验正常了,😄😄😄😄😄😄

常见问题

已经按照文档配置了,但是还是访问不了,我该肿么办?

解决方案:

是否添加了APP 支持 Universal Link,详见步骤2;查看域名是否正确配置 SSL 证书,(如果你是阿里云的用户,阿里云提供的免费证书好像就可以正确配置);查看上传的文件是否带有后缀名;查看apple-app-site-association的链接是否带端口号;检查apple-app-site-association中的数据是否为正确的 JSON 格式;查看配置的 Univeral Link 是否与apple-app-site-association中的path具有一致性;删除 APP,重装试一试,apple-app-site-association中的设置只在 APP 第一次安装或者更新时才会被苹果拉取;

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存