URL Schemes
定义一个URL Schemes
:
- 添加
URL types
: 点击左边剪头打开列表,可以看到 Item 0,一个字典实体。展开 Item 0,可以看到 URL Identifier,一个字符串对象。该字符串是你自定义的 URL scheme 的名字。
- 点击 Item 0 新增一行,从下拉列表中选择
URL Schemes
,敲击键盘回车键完成插入。 (允许应用定义多个 URL schemes)
- 此时可以用
safari
访问TYRAD://
用其他应用访问app
有一点要特别注意,你不能阻止其他应用通过自定义 URL scheme 调用你的应用,然而你可以跳过后续的操作
判断是否能访问app
[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"TYRAD://"]]
访问app
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"weixin://"]];
info.plist需要添加需要访问app的白名单:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>wechat</string>
<string>weixin</string>
<string>sinaweibohd</string>
<string>sinaweibo</string>
<string>sinaweibosso</string>
<string>weibosdk</string>
<string>weibosdk2.5</string>
<string>mqqapi</string>
<string>mqq</string>
<string>mqqOpensdkSSoLogin</string>
<string>mqqconnect</string>
<string>mqqopensdkdataline</string>
<string>mqqopensdkgrouptribeshare</string>
<string>mqqopensdkfriend</string>
<string>mqqopensdkapi</string>
<string>mqqopensdkapiV2</string>
<string>mqqopensdkapiV3</string>
<string>mqzoneopensdk</string>
<string>wtloginmqq</string>
<string>wtloginmqq2</string>
<string>mqqwpa</string>
<string>mqzone</string>
<string>mqzonev2</string>
<string>mqzoneshare</string>
<string>wtloginqzone</string>
<string>mqzonewx</string>
<string>mqzoneopensdkapiV2</string>
<string>mqzoneopensdkapi19</string>
<string>mqzoneopensdkapi</string>
<string>mqzoneopensdk</string>
<string>alipay</string>
<string>alipayshare</string>
</array>
被访问的app
App delegate 解析得到的url即可
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
NSLog(@"9- %@",url);
NSLog(@"URL scheme:%@", [url scheme]);
return NO;
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options{
NSLog(@"9+ %@",url);
NSLog(@"URL scheme:%@", [url scheme]);
return YES;
}
更新:
Universal Links
大意是通过一个简单的网址就能唤起你的app,而不需要定制schema
参考出处:http://www.cocoachina.com/ios/20150902/13321.html
配置
-
targets
-> capabilities
-> Associated Domains
添加需要用到域名(必须要有applinks:
前缀) .
-
服务端配置apple-app-site-association
文件。web server 需要支持https,客户端需要通过https访问,并且不支持任何重定向。大概长这样:
{
"applinks": {
"apps": [],
"details": {
"6N2JJHT3P2.com.tyrad.UnivsalLinksDemo": {
"paths":[ "*" ]
}
}
}
}
com.tyrad.UnivsalLinksDemo
为bundle Id,。
6N2JJHT3P2
为TeamId, 可以从这里看到: https://developer.apple.com/account/#/membership
App启动时会从指定的域名: https://domain.com/apple-app-site-association 下载这个文件。
-
代码中的配置比较简单,AppDelegate中实现相应的方法,再手动解析url参数实现对应操作即可:
- (BOOL)application:(UIApplication *)application
continueUserActivity:(NSUserActivity *)userActivity
restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler
{
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
NSLog(@"host = %@",userActivity.webpageURL);
NSLog(@"host = %@",userActivity.webpageURL.host);
}
return YES ;
}
优点
- 不需要设置白名单
- 比较简单,网页 && app通用
- 方便app内通信,比如微信内的跳转
实际开发中遇到的几点
- qq中的h5网页可以直接通过a标签,用scheme的方式打开app 。 Universal link 不可以。
- 微信中如果需要打开应用,可以按微信的文档来处理(非直接universal link)。 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/APP_GET_EXTINF.html
- 更新 - iOS14上遇到的问题
https://developer.apple.com/forums/thread/659156
Starting with macOS 11 and iOS 14, apps no longer send requests for apple-app-site-association files directly to your web server. Instead, they send these requests to an Apple-managed content delivery network (CDN) dedicated to associated domains.
While you’re developing your app, if your web server is unreachable from the public internet, you can use the alternate mode feature to bypass the CDN and connect directly to your private domain.
You enable an alternate mode by adding a query string to your associated domain’s entitlement as follows:
苹果策略改变,不再直接请求配置的域名。因此测试环境或国外不能访问的情况下可能会有问题。
The user-agent string for the Apple App Site Association CDN bot is:
Code Block
AASA-Bot/1.0.0
If you're blocking the above, once unblocked, it may take several hours for the object to be refreshed across all caches.
由于 Universal Links 中的 apple-app-site-association 文件现在通过 CDN 的方式来分发,针对一些无法通过公共互联网访问到你的 Web 服务器,比如服务器可能是用于部署测试的 Web 服务器,或者仅供连接到你内部网络的员工使用的Web 服务器。我们如何继续支持这些方案呢?
我们在 CDN 支持中设计了一些功能,可以为你提供帮助。我们称它们为备用模式。备用模式使您可以绕过 CDN 并直接连接到你的 Web 服务器中。
开发者模式,设计用于在构建和测试应用程序之前将其部署到 TestFlight 或最终用户时使用。
托管模式,用于在使用 MDM 配置文件安装应用程序时使用。
下表为各种模式下的限制和应用范围
在 Entitlement 开启备用模式也很简单,只需要在配置中的 URL 添加开启参数即可: