网上也有讲这块的,感觉讲得都不是很好。而且有一些细节根本没有讲清楚。这里重写整理一下相关知识点。
主要内容
URL Scheme 是什么?
项目中关键的配置
注意事项
URL Scheme 是什么?
iOS有个特性就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme用于从浏览器或其他应用中启动本应用。常见的分享到第三方之间的跳转都是基于Scheme的。
通过对比网页链接来理解iOS 上的 URL Schemes,应该就容易多了。
URL,我们都很清楚,http://www.apple.com就是个URL,我们也叫它链接或网址;Schemes,表示的是一个URL 中的一个位置——最初始的位置,即://之前的那段字符。比如http://www.apple.com这个网址的Schemes是 http。
根据我们上面对URL Schemes的使用,我们可以很轻易地理解,在以本地应用为主的 iOS 上,我们可以像定位一个网页一样,用一种特殊的 URL 来定位一个应用甚至应用里某个具体的功能。而定位这个应用的,就应该这个应用的URL 的 Schemes 部分,也就是开头儿那部分。比如短信,就是 sms:
你可以完全按照理解一个网页的 URL ——也就是它的网址——的方式来理解一个 iOS 应用的 URL,拿苹果的网站和 iOS 上的微信来做个简单对比:
| 网页(苹果) | iOS 应用(微信) | |
|---|---|---|
| 网站首页/打开应用 | http://www.apple.com | weixin:// |
| 子页面/具体功能 | http://www.apple.com/mac/(Mac页面) | weixin://dl/moments(朋友圈) |
关于基础概念性的就讲这么多
项目中关键的配置
在项目Info的Url Type中配置(被唤起端)
Url Type,表示可以被哪些带前缀Url打开,而不是可以打开以这些前缀开头的app。

说明
URL identifier只是一个标示符,随意填写,建议写成:
com.*.*反转域名的方法保证该名字的唯一性。URL Scheme就是你用来通信的命令前缀,用来定位一个应用。
在Plist文件中配置

注意:
URL Schemes是一个数组,允许应用定义多个URL schemes。
接收到唤起如何处理
在代理方法- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation中判断唤起的来源source app,根据Url所携带的参数进行不同的操作。比如跳转到制定的页面,相关的逻辑处理等等.
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
NSLog(@"Calling Application Bundle ID: %@", sourceApplication);
NSLog(@"URL scheme:%@", [url scheme]);
NSLog(@"URL query: %@", [url query]);
// Customer Code
return YES;
}以上配置是在被唤起应用中配置的。
唤起端
一般情况下,唤起端可以直接调用appDelegate的代理方法去唤醒其他应用。
- (void)awakeOtherApp
{
NSString *customURL = @"otherApp://";
if ([[UIApplication sharedApplication]
canOpenURL:[NSURL URLWithString:customURL]])
{
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
}
else
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL error"
message:[NSString stringWithFormat:
@"No custom URL defined for %@", customURL]
delegate:self cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alert show];
}
}这里需要注意一下在
iOS9以后,唤起端需要配置一下
LSApplicationQueriesSchemes.iOS9之后需要,iOS9之后提高了app的安全性,需要给出一个类似白名单的东西,在白名单里面的才能打开app。不然报错:** -canOpenURL: failed for URL: "OpenAppTest://mark?id=007" - error: "This app is not allowed to query for scheme OpenAppTest"**

注意事项
通过上面的方法可以唤醒其他的应用,简单总结下一些注意事项。
URL Scheme 其实就是一个app应用的唯一标志。通过它来确定打开那个应用。
一定要分清哪些配置在哪方配置,被唤醒与唤醒。
iOS9之后需要在唤起端加入
LSApplicationQueriesSchemes千万不能忘。还有一个问题还没解决,如何再次回到唤醒应用的界面。这个需要参考下官方的
XCallbackURL。听说有些复杂,有空再看看。
作者:纸简书生
链接:https://www.jianshu.com/p/7a308f5b89fc
随时随地看视频
热门评论
-
小晖L2019-12-25 0
查看全部评论可以尝试用一下openinstall