iOS URL schema简介

0. 用途

  • URL schema用于其他 APP 或者浏览器启动此 APP 的标识

1. 添加

targets -> app - >info -> URL Types 上添加一个 item

Identifier建议采用反转域名的方法保证该名字的唯一性,比如com.yourCompany.yourApp

URL Schemes理论上随便填什么都可以,比如iOSDevApp

2. 验证

在浏览器中输入iOSDevApp://,确认后就可以跳转到APP

3. 疑问

试验下如果两个 APP 使用同一个URL Schemes,后一个注册URL Schemes的APP会被启动,APP安装后就会注册URL Schemes。

当使用第三方的平台分享或者登陆的时候,使用appkey作为URL Schemes的原理是什么,不可能说新浪需要注册N个URL Schemes提供给我们用。

4. 案例

  • 比如自定义的链接
NSString *customURL = @"iOSDevTips://?token=123abct®istered=1";

- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url

sourceApplication:(NSString*)sourceApplication annotation:(id)annotation

{

// Check the calling application Bundle ID

if([sourceApplication isEqualToString:@"com.xxx.xxxx"])

{

NSLog(@"Calling Application Bundle ID: %@", sourceApplication);

NSLog(@"URL scheme:%@", [url scheme]);

NSLog(@"URL query: %@", [url query]);

returnYES;

}

else

returnNO;

}

Calling Application Bundle ID: com.3Sixty.CallCustomURL

URL scheme:iOSDevTips

URL query: token=123abct®istered=1
  • 比如一些蘑菇街,可以直接从网页上跳转到 APP 的相应页面,应该用的就是query来标识特定的页面,去请求相应的数据。应用内浏览器,测试网页:iOS and Js,点击Click me here:的按钮跳转到 Native 的页面,需要实现以下方法
- (void)webView:(WKWebView *)webViewdecidePolicyForNavigationAction:(WKNavigationAction *)navigationActiondecisionHandler:(void(^)(WKNavigationActionPolicy))decisionHandler{

if(webView != self.webView) {

decisionHandler(WKNavigationActionPolicyAllow);

}

UIApplication *app = [UIApplication sharedApplication];

NSURL *url = navigationAction.request.URL;

if(!navigationAction.targetFrame) {

if([appcanOpenURL:url]) {

[appopenURL:url];

decisionHandler(WKNavigationActionPolicyCancel);

}

}

if([url.schemeisEqualToString:@"shopman"]){

if([appcanOpenURL:url]){

[appopenURL:url];

decisionHandler(WKNavigationActionPolicyCancel);

}

}

decisionHandler(WKNavigationActionPolicyAllow);

}

原文链接:https://www.jianshu.com/p/c030f57776eb

### iOS 中设置 Schema 白名单的配置方法 在 iOS 开发中,为了增强应用的安全性和稳定性,开发者可以通过配置 `LSApplicationQueriesSchemes` 来定义应用程序可以查询的一组 URL Schemes 的白名单。这种机制允许开发者指定哪些自定义协议的应用程序可以在运行时被检测是否存在并调用。 #### 1. 配置 LSApplicationQueriesSchemes 要实现这一功能,需要编辑项目的 `Info.plist` 文件,在其中添加一个新的键名为 `LSApplicationQueriesSchemes` 并将其值设为一个数组。该数组中的每一项都是希望加入到白名单中的 URL Scheme 名称[^1]。 以下是具体的配置方式: ```xml <key>LSApplicationQueriesSchemes</key> <array> <string>scheme1</string> <string>scheme2</string> <string>scheme3</string> </array> ``` 在此示例中,“scheme1”,“scheme2” 和 “scheme3” 是三个不同的 URL Schemes,它们已被列入白名单。这意味着如果当前设备上安装有支持这些 schemes 的其他 App,则本应用能够成功探测并与之交互;反之则无法完成此类操作。 #### 2. 使用 canOpenURL 方法验证 scheme 是否可用 当完成了上述 plist 文件的修改之后,就可以利用 UIApplication 提供的方法来判断某个特定 url scheme 对应的应用是否存在于用户的设备当中: ```swift if let url = URL(string: "scheme1://") { if UIApplication.shared.canOpenURL(url) { print("The app with 'scheme1' is installed.") } else { print("'Scheme1' not supported or corresponding app isn't present.") } } ``` 此代码片段展示了如何检查是否有任何已注册处理 "scheme1://" 类型链接的应用存在。如果没有找到匹配的应用或者目标系统版本低于9.0(因为这个特性是从iOS9引入),那么 will 返回 false 结果。 #### 注意事项 - **隐私保护**: 自从 iOS 9 起实施这项策略以来,苹果公司旨在减少不必要的窥探行为以及提升用户体验的同时保障个人数据安全。 - **全面测试**: 在实际部署前务必针对各种可能的情况进行全面的功能性与兼容性的测试工作,确保所有预期内的第三方服务都能正常运作无误。 ### 总结 通过合理运用 Info.plist 中新增加的支持字段——即 LSApplicationQueriesSchemes 列表项目,我们可以有效地控制我们的移动客户端所能识别出来的外部资源范围,从而达到既满足业务需求又兼顾安全性目的的理想状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值