iOS开发 应用跳转爬坑笔记
首先,如果你希望其他应用能够跳转到你这个应用,你需要给你的应用取一个名字scheme,当然你也可以给你的应用取多个名字,这样别的应用知道你的名字就能够进行跳转了;
怎样给你的应用设置scheme呢?
进入工程,选择工程文件project -> info -> 最下面有个URL TYPES -> 添加
其他的参数暂时不用管,需要用的时候再去研究就行;
这样设置之后别的应用就可以通过代码
[UIApplication.sharedApplication openURL:[NSURL URLWithString:@"yytza://"]]
,进行跳转,其实就是名字作为协议头,后面也可以拼接自定义的路径来实现你的业务;
关于设置白名单LSApplicationQueriesSchemes
这是为了限制[UIApplication.sharedApplication canOpenURL:[NSURL URLWithString:@"yytza://"]
这个方法进行检查手机是否安装了这个应用,这是在苹果9.0以后增加的安全特性, 它只能检测出这个白名单内的应用。
白名单的应用场景
比如你的应用要集成第三方的功能,例如微信、支付宝支付、分享等。这也是为了完善业务细节。实际上就是检查用户的手机有没有安装这个应用,如果没有安装就可以提示安装等;
关于通用链接UniversalLinks
这是苹果10.0以后曾加的特性,这个通用链接的作用就是通过一个链接来跳转你的应用了,例如:微信多商户的问题,因为项目中不能动态添加scheme,所以会出现跳转到微信支付成功不能跳回来的问题,这是通用链接就可以解决这个问题;
至于多商户是因为在不通的微信商户可以通过使用同一个bundle id 创建应用,获取到的是不同的appid,而这个appid就是会作为你应用的scheme,这样就能在使用不同的appid调取微信支付后能够自己跳转回来;
怎样配置universalLinks?
-
为你的应用添加Capability Associated Domains
image.png
必须使用 applinks: 开头,后面就是你们后台存放配置文件的地址,这个文件必须放在根目录或者.well-know下,而且文件名必须为apple-app-site-association,里面内容格式为:
{
"applinks": {
"apps": [],
"details": [
{
"appID": "证书的teamId.应用的bundleid",
"paths": ["/wx/123456/*"]
}
]
}
}
其中path可以根据你的业务自定义
怎么用通用链接跳转?
- 其他应用则可以通过调用applinks后面的域名加里面的path进行跳转
代码跳转
[UIApplication.sharedApplication openURL:[NSURL URLWithString:@"https://配置的域名/wx/123456"] options:@{UIApplicationOpenURLOptionUniversalLinksOnly : @true} completionHandler:^(BOOL success) {
NSLog(success ? @"通用链接跳转成功" : @"通用链接跳转失败");
}];
2.可以从浏览器输入域名+路径的方式打开跳转应用
被打开的iOS应用监听打开后的回调方法
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
NSURL *url = userActivity.webpageURL;
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
}
return true;
}