代码地址如下:
http://www.demodashi.com/demo/12748.html

简介:

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:// + 参数 来完成唤醒跳转客户端界面的。
  • 调用微信、支付宝等客户端完成支付的功能。
  • 三方应用调用系统所带的地图软件。

示例:

接下来就以我之前写的UIActivityViewController系统原生分享-仿简书分享iOS开源小项目-WSL两个Demo为例,让我们看下怎么可以让UIActivityViewController系统原生分享-仿简书分享唤起iOS开源小项目-WSL并进行通信、分享:也就是说让 WSL 像微信、QQ、新浪一样支持第三方社交分享。

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

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

  • WSL 添加Url Scheme

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


/**
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<UIApplicationOpenURLOptionsKey, id> *)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) {
}];
}
  • 通过浏览器打开唤起WSL,测试一下,输入的地址是" WSLAPP://wslmeiksjkfdfkfkfhskfhskfhskj "(Url Scheme://+ 参数字符串),参数可以为空。

二、在UIActivityViewController系统原生分享中添加事件,通过Url Scheme来唤起WSL,并传参

- (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) {
}];
}

三、唤起WSL之后需要做的处理

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

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

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

四、项目结构

Url Scheme实现APP间通信、分享

代码地址如下:
http://www.demodashi.com/demo/12748.html

注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权

Url Scheme实现APP间通信、分享的更多相关文章

  1. 背水一战 Windows 10 (100) - 应用间通信: 分享

    [源码下载] 背水一战 Windows 10 (100) - 应用间通信: 分享 作者:webabcd 介绍背水一战 Windows 10 之 应用间通信 分享 示例1.本例用于演示如何开发一个分享的 ...

  2. iOS通过URL Scheme启动app(收集了常用的app的URL Scheme)

    URL Scheme不仅可以打开其他的app,当然你也能为自己的app设置URL Scheme 1.如何设置给app设置URL Scheme 添加URL types字段数组 设置URL identif ...

  3. URL Scheme吊起app实现另外一种登录方式

    https://developer.apple.com/library/content/featuredarticles/iPhoneURLScheme_Reference/Introduction/ ...

  4. 利用URL Scheme打开APP并传递数据

    https://blog.csdn.net/u013517637/article/details/55251421 利用外部链接打开APP并传递一些附带信息是现在很多APP都有的功能,我在这把这部分的 ...

  5. 通过注册的URL Scheme向目标APP传递参数

    通过注册的URL Scheme向目标APP传递参数 通过URL Scheme启动APP很简单就可以做到,但有时候我们想在启动APP的时候传递一些参数,这个时候我们就可以通过URL Scheme自定义U ...

  6. iOS - App 间的通信方式

    1.前言 iOS 系统是相对封闭的系统,App 各自在各自的沙盒(sandbox)中运行,每个 App 都只能读取 iPhone 上 iOS 系统为该应用程序程序创建的文件夹 AppData 下的内容 ...

  7. iOS 禁用`URL Scheme`和`Universal Link`(通用链接)

    为什么要禁用URL Scheme和Universal Link(通用链接) 通常我们APP中都会嵌套一些web页面,有时我们的web页面会被DNS劫持从而跳转到其他APP中:或者是某些APP的Univ ...

  8. iOS App 自定义 URL Scheme 设计(转自COCOACHINA)

    在 iOS 里,程序之间都是相互隔离,目前并没有一个有效的方式来做程序间通信,幸好 iOS 程序可以很方便的注册自己的 URL Scheme,这样就可以通过打开特定 URL 的方式来传递参数给另外一个 ...

  9. 为什么可以通过URL来调起APP - URL Scheme和Intent

    在手机浏览器中可以通过URL调起APP是不是很神奇?这篇文章就告诉你为什么. URL Scheme 先从前端能接触到的URL Scheme分析一下 丢wiki:https://en.wikipedia ...

随机推荐

  1. C++编程见闻

    今天心血来潮,看到很多天借的一本书<轻松学C++编程>,书就一般,但是由于自己的刚开始学c++,勉强凑活来看吧,就把学习的过程亮出来,权且对自己的一种变相激励也好. 程序一 首先:打开vi ...

  2. v4l2 spec 中文 Ch01【转】

    转自:http://blog.csdn.net/wuhzossibility/article/details/6638245 目录(?)[-] Chapter 1 通用APICommon API El ...

  3. 简述web工程师的职责与学习

    最近两年web突然很火,也有很多人涌入这一行,但这行实际上是进来的人很多,出去的人也很多. 在我眼里,Web前端开发工程师的职责有:1.Web前端表现层及与前后端交互的架构设计和开发2.配合后台开发人 ...

  4. Fiddler抓包10-会话框添加查看get与post请求类型【转载】

    本篇转自博客:上海-悠悠 原文地址:http://www.cnblogs.com/yoyoketang/tag/fiddler/ 前言 在使用fiddler抓包的时候,查看请求类型get和post每次 ...

  5. 让Asp.net Web预启动

    IIS8以下解决方案: 当我们把网站部署在IIS7或IIS6S的时候,每当IIS或是Application Pool重启后,第一次请求网站反应总是很慢,原因大家都知道(不知道可以参考这个动画说明ASP ...

  6. Ubuntu14.04 在右键中添加 在终端中打开

    1.在terminal中执行: sudo apt-get install nautilus-open-terminal 此时可能会提示:nable to locate package nautilus ...

  7. Codeforces 1009F Dominant Indices

    另类解法 将每一个节点拥有的各深度节点数量存在vector中,向上返回,这样不会占用过多的内存,以此判断最多节点相应的深度即可,但正常写最后一个数据会T,毕竟一次复制一个节点,相当于复制了(1+2+3 ...

  8. Kali Linux Wine32英文字体不显示问题

     Kali Linux Wine32英文字体不显示问题 Kali Linux提供了Wine32工具.在运行Wine32后,界面可以显示中文,但不能显示英文文字.英文文字均显示为方块.这是由于缺少对应的 ...

  9. javascript与java的不同之处

    javascript与java的不同之处   虽然很像,但不是一种语言. 二者的区别体现在: 首先,它们是两个公司开发的不同的两个产品,Java是SUN公司推出的新一代面向对象的程序设计语言,特别适合 ...

  10. 隐藏服务器真实IP的方法来防止DDOS攻击

    2017-08-22 作者:小唐 点击: 10,500次 在无盘系统的环境下,服务器软件存在漏洞,就容易受到DDOS攻击,隐藏服务器真实IP是解决问题最好的方法,下面小编与大家分享一下隐藏服务器真实I ...