博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS Url Scheme实现APP间通信、分享
阅读量:7079 次
发布时间:2019-06-28

本文共 3332 字,大约阅读时间需要 11 分钟。

简介:

URL Scheme就是一个可以让app相互之间可以跳转的对外接口。通过给APP定义一个唯一的URL路径来从外部快速的打开这个指定的APP,每个app的URL Scheme都是不一样的,如果存在一样的URL Scheme,那么系统就会响应先安装那个app的URL Scheme,因为后安装的app的URL Scheme被覆盖掉了,是不能被调用的。

应用:

  • 第三方分享的SDK就是通过这种方式来实现分享的,我们将需要分享的数据传递给SDK,SDK通过OpenURL来打开第三方应用传递数据,返回时SDK来处理OpenUrl的参数,实现查看分享的回调。
  • 从浏览器中某一页面的点击事件可以打开对应客户端的某一个界面,就是通过协议 URL Scheme:// + 参数 来完成唤醒跳转客户端界面的。
  • 调用微信、支付宝等客户端完成支付的功能。
  • 三方应用调用系统所带的地图软件。

示例:

接下来就以我之前写的和两个Demo为例,让我们看下怎么可以让唤起并进行通信、分享:也就是说让 像微信、QQ、新浪一样支持第三方社交分享。

一、配置的应用信息,添加Url Scheme

要跳转到别人的app,就要知道别人的app的跳转协议是什么,需要传入什么参数,如果我们希望别人打开我们的app,也需要在info.plist中配置跳转协议,然后再重写AppDelegate中的 openUrl方法来处理逻辑参数。

  • 给 添加Url Scheme

  • 重写中AppDelegate中的openUrl方法,当被唤起时会执行openUrl方法,我们可以在方法里根据传入的参数的做出处理。如果只想允许在特定情况下才能被唤起,比如说分享,就可以对传入的openUrl加以验证,符合要求return YES ,否则返回NO。

//第三方应用打开本应用启动- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    // Override point for customization after application launch.    //第三方应用打开本应用启动    if(launchOptions[UIApplicationLaunchOptionsURLKey] != nil){        [self application:application handleOpenURL:launchOptions[UIApplicationLaunchOptionsURLKey]];    }    return YES;}/** iOS 9.0 以下 程序在运行过程中才能调用 */- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{    NSString *text = [[url host] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];    NSLog(@"URL scheme:%@", [url scheme]);    NSLog(@"URL query: %@", [url query]);    return YES;}/** iOS 9.0 之后    程序在运行过程中才能调用三方唤起本程序后执行的方法 return YES 表示允许唤起本程序  */- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary
*)options{ NSLog(@"URL scheme:%@", [url scheme]); //参数 NSLog(@"URL host:%@", [url host]); UIAlertView *alertView=[[UIAlertView alloc] initWithTitle:@"分享" message:[url host] delegate:self cancelButtonTitle:nil otherButtonTitles:@"分享完成", nil]; [alertView show]; return YES;} - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{ //返回URL scheme = wsl123456的主应用 NSURL * url = [NSURL URLWithString:@"wsl123456://success"]; [[UIApplication sharedApplication] openURL:url options:nil completionHandler:^(BOOL success) { }];}复制代码
  • 通过浏览器打开唤起,测试一下,输入的地址是" WSLAPP://wslmeiksjkfdfkfkfhskfhskfhskj "(Url Scheme://+ 参数字符串),参数可以为空。

二、在中添加事件,通过Url Scheme来唤起,并传参
- (IBAction)shareToWSL:(id)sender {        //不带参数     NSString * wslUrlScheme = @"WSLAPP://";    //如果参数含有特殊字符或汉字,需要转码,否则这个URL不合法,就会唤起失败;参数字符串的格式可以自定义,只要便于自己到时候解析就行    NSString * parameterStr = [@"name=wsl&weight=保密" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];        //不带参数    //    NSURL * url = [NSURL URLWithString:wslScheme];    //带参数    //WSLAPP://name=wsl&weight=保密    NSURL * url = [NSURL URLWithString:[wslUrlScheme stringByAppendingString:parameterStr]];        //iOS 10以下//    [[UIApplication sharedApplication] openURL:url];    //iOS 10以上    [[UIApplication sharedApplication] openURL:url options:nil completionHandler:^(BOOL success) {    }];}复制代码
三、唤起之后需要做的处理

唤起之后,根据传入的参数进行界面数据的处理,处理完成之后,我们需要自动返回主应用,同时传递数据处理的结果。相当于回调唤起,过程同一、二步。

  • 给 也添加Url Scheme,便于从返回主应用。

  • 重写中AppDelegate中的openUrl方法,在返回应用时根据从返回的数据处理结果做出反应。

以上就是通过Url Scheme实现APP间相互跳转、传递数据、通信、分享功能的过程。

经过以上操作内容,小伙伴们是不是对其中的步骤有种似曾相识的感觉呢?没错,集成的第三方分享SDK就是通过这种方式来实现分享的,只不过它们把数据、方法都封装到了SDK中。

通过传统的HTTP链接来启动APP。

转载地址:http://ydvml.baihongyu.com/

你可能感兴趣的文章
项目技术团队
查看>>
commons dbcp.jar有什么用
查看>>
STM32 Unicode 与 GBK 转换 .bin文件放到SD卡是啥意思
查看>>
nginx + tomcat配置负载均衡
查看>>
ARM-Linux (临时,正式) 建立页表的比较【转】
查看>>
Java 多线程 并发编程
查看>>
PLC M8000 M8001 M8002 M8003
查看>>
javax.servlet.WriteListener
查看>>
转: 学习Javascript闭包(Closure) (阮一峰)
查看>>
Atitit.你这些项目不都是模板吗?不是原创 集成和整合的方式大总结
查看>>
p4c-bm安装
查看>>
前端福利:一套UI框架
查看>>
angularjs UI Libraries
查看>>
配置Google Gmail分类和过滤器
查看>>
Ubuntu 14.04 LTS中怎样安装fcitx中文输入法
查看>>
iphone:UISplitView
查看>>
一种简单的数据库性能测试方法
查看>>
使用 Spring 3 MVC HttpMessageConverter 功能构建 RESTful web 服务
查看>>
滚动页面
查看>>
Android日志打印类LogUtils,能够定位到类名,方法名以及出现错误的行数并保存日志文件...
查看>>