概述

常见的涉及到应用程序之间的跳转场景,比如社交分享、支付宝、微信支付、链接跳转到应用。

在iOS中应用跳转的本质:打开一个应用只需要拿到对应应用的URL即可。

统一资源定位符

URL(统一资源定位符)的组成:协议头(scheme)+资源路径。

协议头:决定查找资源的的方式 比如 http:// 、https:// 、 file://

资源路径:path 路径

注意:一个有效的URL必须协议头,可以没有资源路径。也就是说我们只要知道一个应用的协议头就可以跳转到该应用。

默认一个iOS应用是没有URL的需要我们进行配置。

iOS实现应用程序跳转

第一步需要给被跳转应用配置URL。其它的应用才能通过该URL跳转到该应用。在TARGETS->Info->URL Types配置URL,可以只配置协议头。

如果别的应用跳转到该应用可以通过UIApplication的openURL:方法进行跳转

UIApplication *application = [UIApplication sharedApplication];
NSURL *url = [NSURL URLWithString:@"wechat://"];
if ([application canOpenURL:url]) {
[application openURL:url];
}else{
NSLog(@"不能打开微信应用");
}

同时我们也可以通过点击链接的方式打开该应用,比如在Safari浏览器输入wechat://也可以跳转。

通过上面的配置加代码实现跳转还是不够的,在跳转时控制台会输出

原因:iOS 9系统策略更新,限制了http协议的访问,此外应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装。

例如:如果是应用A应用想跳转到B应用,需要在A应用的“Info.plist”将B应用的URL Schemes列为白名单。

        <key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>wechat</string>
</array>

这样就可以实现应用程序之间的跳转了。

iOS实现应用程序跳转指定页面

我们在App分享场景,可以分享到微信好友与微信朋友圈。这个就需要设计跳转应用指定的页面。这里需要用到UIApplication的代理方法。

目前已经有三代理方法,当应用是被其它应用共通过openURL方法打开回来到回调方法,前两个已经过期。

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options

根据URL资源路径携带参数做判断

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
NSString *urlString = url.absoluteString;
NSLog(@"urlStr=%@", urlString); UINavigationController *rootNav = (UINavigationController *)self.window.rootViewController;
// 1.首先让导航控制器pop所有栈中的控制器 解决多次跳转出现上次push的页面没有pop 再一次push出现需要多次返回问题
[rootNav popToRootViewControllerAnimated:NO]; UIViewController *rootVC = [rootNav childViewControllers].firstObject; if ([urlString containsString:@"timeline"]) {
[rootVC performSegueWithIdentifier:@"HomeToTimeline" sender:nil];
NSLog(@"跳转到朋友圈");
}else if ([urlString containsString:@"session"]){
[rootVC performSegueWithIdentifier:@"HomeToSession" sender:nil];
NSLog(@"跳转到微信好友");
} return YES;
}

iOS开发系列-应用程序之间跳转的更多相关文章

  1. iOS开发拓展篇—应用之间的跳转和数据传递

    iOS开发拓展篇—应用之间的跳转和数据传 说明:本文介绍app如何打开另一个app,并且传递数据. 一.简单说明 新建两个应用,分别为应用A和应用B. 实现要求:在appA的页面中点击对应的按钮,能够 ...

  2. iOS开发系列--App扩展开发

    概述 从iOS 8 开始Apple引入了扩展(Extension)用于增强系统应用服务和应用之间的交互.它的出现让自定义键盘.系统分享集成等这些依靠系统服务的开发变成了可能.WWDC 2016上众多更 ...

  3. iOS开发系列--Swift进阶

    概述 上一篇文章<iOS开发系列--Swift语言>中对Swift的语法特点以及它和C.ObjC等其他语言的用法区别进行了介绍.当然,这只是Swift的入门基础,但是仅仅了解这些对于使用S ...

  4. iOS开发系列--通知与消息机制

    概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情.iOS中通知机制又叫消息机制,其包括两类:一类是本地 ...

  5. iOS开发系列--数据存取

    概览 在iOS开发中数据存储的方式可以归纳为两类:一类是存储为文件,另一类是存储到数据库.例如前面IOS开发系列-Objective-C之Foundation框架的文章中提到归档.plist文件存储, ...

  6. iOS开发系列--网络开发

    概览 大部分应用程序都或多或少会牵扯到网络开发,例如说新浪微博.微信等,这些应用本身可能采用iOS开发,但是所有的数据支撑都是基于后台网络服务器的.如今,网络编程越来越普遍,孤立的应用通常是没有生命力 ...

  7. iOS开发系列--C语言之基础知识

    概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift ...

  8. iOS开发系列--让你的应用“动”起来

    --iOS核心动画 概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建 ...

  9. iOS开发系列--并行开发其实很容易

    --多线程开发 概览 大家都知道,在开发过程中应该尽可能减少用户等待时间,让程序尽可能快的完成运算.可是无论是哪种语言开发的程序最终往往转换成汇编语言进而解释成机器码来执行.但是机器码是按顺序执行的, ...

随机推荐

  1. RabbitMQ使用(一)

    1. 安装与使用 1. 激活 RabbitMQ's Management Plugin (前面跟绝对路径) "D:\娱乐\rabbitmq_server-3.6.5\sbin\rabbitm ...

  2. jeecg接口开发及权限实现原理

    接口开发使用的框架 jeecg本身是基于 Spring MVC 框架搭建的,因此,使用 Spring MVC 框架的 RESTful API 功能来进行接口开发就是顺理成章的事了. 接口的拦截与鉴权 ...

  3. Windows下安装PIL进行图像处理

    过程一波三折 参考 http://blog.csdn.net/zxia1/article/details/8254113 http://stackoverflow.com/questions/3544 ...

  4. HBase 永久RIT(Region-In-Transition)问题

    HBase 永久RIT(Region-In-Transition)问题:异常关机导致HBase表损坏和丢失,大量Regions 处于Offline状态,无法上线. 问题1:启动HBase时,HBase ...

  5. 【Stanford Machine Learning Open Course】学习笔记目录

    这里是斯坦福大学机器学习网络课程的学习笔记. 课程地址是:https://class.coursera.org/ml-2012-002/lecture/index 课程资料百度网盘分享链接:https ...

  6. mysql优化3:BTree索引和Hash索引

    一.BTree索引 注:名叫btree索引,大的方面看,都用的平衡树,但具体的实现上,各引擎稍有不同,比如,严格地说,NDB引擎使用的是T-tree,Myisam和innodb中默认用B-tree索引 ...

  7. 【node】---token的原理及使用---【alley】

    一.登陆的验证流程 当用户请求登录的时候,如果没有问题,我们在服务端生成一条记录,这个记录里可以说明一下登录的用户是谁,然后把这条记录的 ID 号发送给客户端,客户端收到以后把这个 ID 号存储在 C ...

  8. Redis数据结构之跳跃表-skiplist

    在Redis中,zset是一个复合结构: 使用hash来存储value和score的映射关系 使用跳跃表来提供按照score进行排序的功能,同时可以指定score范围来获取value列表 结构 zse ...

  9. 8、如何实现可迭代对象和迭代器对象 9、如何使用生成器函数实现可迭代对象 10、如何进行反向迭代以及如何实现反向迭代 11、如何对迭代器做切片操作 12、如何在一个for语句中迭代多个可迭代对象

    8.如何实现可迭代对象和迭代器对象 PS:注意重载Iterator方法的时候,需要和原来的方法名一样,否则创建实例时会报错 from collections import Iterator,Itera ...

  10. 监控数据库SqlServer

    监控数据库的连接数select COUNT( * ) from master.dbo.sysprocesses select COUNT( * ) from master.dbo.sysprocess ...