iOS URL Schemes唤醒App

2019-10-28  本文已影响0人  Mica_马超

<meta charset="utf-8">

1. 系统相关

应用名称 URL Scheme
短信 sms://
app store itms-apps://
电话 tel://
无线局域网 App-Prefs:root=WIFI
蓝牙 App-Prefs:root=Bluetooth
蜂窝移动网络 App-Prefs:root=MOBILE_DATA_SETTINGS_ID
个人热点 App-Prefs:root=INTERNET_TETHERING
运营商 App-Prefs:root=Carrier
通知 App-Prefs:root=NOTIFICATIONS_ID
通用 App-Prefs:root=General
通用-关于本机 App-Prefs:root=General&path=About
通用-键盘 App-Prefs:root=General&path=Keyboard
通用-辅助功能 App-Prefs:root=General&path=ACCESSIBILITY
通用-语言与地区 App-Prefs:root=General&path=INTERNATIONAL
通用-还原 App-Prefs:root=Reset
墙纸 App-Prefs:root=Wallpaper
Siri App-Prefs:root=SIRI
隐私 App-Prefs:root=Privacy
Safari App-Prefs:root=SAFARI
音乐 App-Prefs:root=MUSIC
音乐-均衡器 App-Prefs:root=MUSIC&path=com.apple.Music:EQ
照片与相机 App-Prefs:root=Photos
FaceTime App-Prefs:root=FACETIME

2. 应用相关

应用名称 URL Scheme
微博 weibo://
QQ mqq://
QQ群组 mqqapi://card/show_pslcard?src_type=internal&version=1&card_type=group&uin={QQ群号}
QQ联系人 mqqapi://card/show_pslcard?src_type=internal&version=1&uin={QQ号码}
支付宝 alipay://
微信 weixin://
微信 wechat://
微信-扫一扫 weixin://dl/scan
微信-反馈 weixin://dl/feedback
微信-朋友圈 weixin://dl/moments
微信-设置 weixin://dl/settings
微信-消息通知设置 weixin://dl/notifications
微信-聊天设置 weixin://dl/chat
微信-通用设置 weixin://dl/general
微信-公众号 weixin://dl/officialaccounts
微信-游戏 weixin://dl/games
微信-帮助 weixin://dl/help
微信-个人信息 weixin://dl/profile
微信-功能插件 微信-功能插件
虾米音乐 xiami://
chrome googlechrome://
微博国际版 weibointernational://
摩拜单车 mobike://
ofo ofoapp://
有道云笔记 youdaonote://
印象笔记 evernote://
今日头条 snssdk141://
网易新闻 网易新闻
网易云音乐 orpheuswidget://
QQ音乐 qqmusic://
QQ音乐最近播放 qqmusic://today?mid=31&k1=2&k4=0
美团外卖 meituanwaimai://
美团 imeituan://
Gmail googlegmail://
网易邮箱 neteasemail://
QQ邮箱 qqmail://
腾讯视频 tenvideo://
爱奇艺 iqiyi://
12306 cn.12306://
有道词典 yddict://
钉钉 dingtalk://

3. URL Schemes

由于苹果采用的特殊的方式防护用户数据安全,就是我们常说的沙盒方式。一个程序只能访问其特定指定的内存空间,对于其他空间是无法访问。这就造成了一个问题就是,如果我们想要通过一个程序A,来唤醒程序B,并且与B交互的话就很困难。好在我们有一个方式 通过 URL Schemes.

对于URL Schemes,很像我们一个网页的URL.我们可以这么比方。对于一个浏览器Chrome来说,一个个网站:百度,谷歌,淘宝,京东等。类比手机可以说 Chrome 就是我们的手机。百度,谷歌,等就是我们手机上一个个的应用程序。现在我们需要在应用程序之间相互唤醒。那么我们就需要 URL Schemes 来操作。

例如 weixin://dl/momentsweixin就是微信的Scheme。完全可以按照一个URL的方式来理解Scheme

注意

4. 注册自定义 URL Scheme

  1. 在项目中 Xcode Project Navigator中找到info.plist,点击添加URL Types.
  2. 其中URL Types是一个数组,点击打开Item 0,继续点击打开 Item 0为一个字典,点击打开其中有URL identifier一般设置其值为我们项目Bundle ID
  3. 在打开的Item 0中点击继续添加,下拉选择URL Schemes,这里是一个数组,你可以定义多个。例如定义Lee

这里定义URL Schemes是不需要://,只需要字符串就行。

  1. 定义好之后我们可以直接拿浏览器进行验证,输入Lee://

5. 测试自定义 URL Scheme

  1. 新建工程B,创建按钮。打开工程A
NSString *url = @"Lee://";
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:url]]) {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url] options:@{} completionHandler:nil];
}else{
    NSLog(@"打不开");
}

可能会打不开,因为我们么有在工程B中没有添加 query schemes

  1. 在工程B中添加 query schemes
<key>LSApplicationQueriesSchemes</key> 
  <array> 
  <string>zhunaer</string> 
  </array>

6. 通过 URL Scheme传值

B工程通过 URL Scheme 传值到A工程。可以通过类似于URL拼接参数一样的进行拼接。
例如:@"Lee://?name=xxx&age=22" 方式

B工程完整代码:

NSString *url = @"Lee://?name=xxx&age=22";
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:url]]) {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url] options:@{} completionHandler:nil];
}else{
    NSLog(@"打不开");
}

对于iOS新接口

[[UIApplication sharedApplication] openURL:URL options:@{} completionHandler:nil];

目前options可传入参数KeyUIApplication头文件只有一个:UIApplicationOpenURLOptionUniversalLinksOnly,其对应的Value为布尔值,默认为False.如该Key对应的ValueTrue,那么打开所传入的Universal Link时,只允许通过这个Link所代表的iOS应用跳转的方式打开这个链接,否则就会返回successfalse,也就是说只有安装了Link所对应的App的情况下才能打开这个Universal Link,而不是通过启动Safari方式打开这个Link的代表的网站.

A工程完成代码:

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        NSLog("calling application bundle id: %@",options);
        NSLog("url shceme:\(url.scheme!)");
        NSLog("参数:\(url.query!)");
        return true
    }

 /**
    calling application bundle id: {
      UIApplicationOpenURLOptionsOpenInPlaceKey = 0;
      UIApplicationOpenURLOptionsSourceApplicationKey = "com.rookie.T";
    }
    url shceme:Lee
    参数:name=xxx&age=22
 */
上一篇 下一篇

猜你喜欢

热点阅读