我们平时在浏览HTML5页面的时候,经常会遇到跳转到微信、淘宝、京东等App页面,如下图所示:

那么IOS是如何实现App之间的跳转呢?今天就来学习一下。

URL Scheme:

IOS在系统层面为我们提供了URL Scheme来实现App之间的通信,比如App启动,跳转和参数传递。
其拉起的格式如下:

比如我们想拉起微信,可以在浏览器页面输入:weixin://
就可以跳转到微信app页面。当然我们也可以在weixin:// 后面追加内容,让其跳转到子页面。
接下来我就演示一下如何在Safari浏览器中拉起我自己创建的一个App。
要让App支持被拉起,首先我们需要在URL Types中设置该App的URL Scheme。
如图,我设置自己的App的URL Scheme为Sample。

接下来我在模拟器中进行试验:输入Sample://

模拟器就会跳出是否拉起App的窗口,选择Open,就可以实现跳转了。
这里需要强调一下,如果我们将自己App的URL Scheme设置为weixin,并在Safari浏览器中输入weixin://,浏览器依旧会打开我们的App,这就为一些不法分子提供了机会,利用打开微信等人们App的链接,而实际上跳转到的页面很可能是非法的链接。
以上展示了使用Safari唤起我的App,那么如何使用我自己的App唤起别的App呢?接下来就演示一下。

两个App之间的唤起:

如图,模拟器中,使用左边的App拉起右边的App。

首先我需要设置我要拉起的App的URL Scheme,此处设置为TestScheme

接着我在我自己的App里书写拉起的逻辑代码。
这里需要用到两个函数,一个是canOpenUrl,一个是openURL,原型如下:

- (void)openURL:(NSURL*)url options:(NSDictionary<UIApplicationOpenExternalURLOptionsKey, id> *)options completionHandler:(void (^ __nullable)(BOOL success))completion API_AVAILABLE(ios(10.0)) NS_EXTENSION_UNAVAILABLE_IOS("");

这里代码中我们在viewClick函数中实现拉起App的逻辑。

-(void) viewClick{NSLog(@"viewClick");//点击手势执行打开TestScheme AppNSURL *urlScheme = [NSURL URLWithString:@"test://"];  //注意这里的URL要写成你在对应的拉起的App中设置的URL Scheme__unused BOOL canOpenURL = [[UIApplication sharedApplication] canOpenURL:urlScheme];[[UIApplication sharedApplication] openURL:urlScheme options:@{} completionHandler:^(BOOL success) {//}];
}

此时我们运行我们的App,并且执行点击逻辑,但是并不能拉起我们的App,并且canOpenURL返回的也是false。
这是因为在IOS9之后,IOS提供了白名单,只有在白名单里的App才能被拉起,因此,我们还需要把我们要拉起的App加入白名单。
接下来我们把要拉起的App加入白名单:

加入白名单后,我们再次点击黄色方框:
设置断点观察:

可以看到canOpenURL返回YES,并且成功拉起TestScheme App。

IOS开发之App之间的拉起和跳转相关推荐

  1. iOS开发之 app版本升级流程

    原文链接:http://www.cnblogs.com/LGLblog/p/5548823.html 版本号的格式:v<主版本号>.<副版本号>.<发布号> 版本号 ...

  2. (0003) iOS 开发之App 适配iOS 10

    iOS  10 给开发者带来的变化 顺便加一句:我是第一时间更新Xcode 8正式版的,一切正常,注释快捷键也没有网上说的问题.运行速度更快了,不容易崩溃了! App 做了哪些兼容: 1.UI 兼容, ...

  3. iOS开发之APP内部切换语言

    2019独角兽企业重金招聘Python工程师标准>>> 前言 iOS开发中,随着APP越来越完善,很多APP都做了国际化,也实现了APP内部切换语言. 原理 国际化都会走到NSBun ...

  4. iOS开发之iOS15.6之后拉流LFLiveKit,画面模糊及16.1马赛克问题

    更新了iOS15.6系统后,发现拉取LFLiveKit进行直播的流,竟然是这样的: 模糊不清,于是思考是什么原因导致的. 1.是不是拉流端出现的问题? 使用安卓拉取iOS的直播流,是同样的效果,又考虑 ...

  5. ios开发之app内启动用户评价

     原文链接  http://blog.csdn.net/yangxt/article/details/8196914 恰当的指引用户去给app评分是获得用户反馈的一种不错的途径. "通过cu ...

  6. iOS开发之AVKit框架使用

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发之AVKit框架使用 一.引言 在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFounda ...

  7. (0016)iOS 开发之Mac上Navicat Premium 创建远程连接和本地连接

    1.下载安装 (百度云盘里面有安装文件和注册机) 链接: https://pan.baidu.com/s/1kVG1k71 密码: mr5g 破解教程看这篇博客:http://blog.csdn.ne ...

  8. 李洪强iOS开发之RunLoop的原理和核心机制

    李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研 ...

  9. iOS开发之Xcode常用调试技巧总结

    转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...

最新文章

  1. 基本概念_复杂网络基本概念
  2. Mysql将日期转为字符串
  3. 不用任何比较判断找出两个数中较大的数
  4. 切换账户、切换命令行和图形界面
  5. Python实现-中介者模式
  6. 【算法】一个简单的K近邻(KNN)原理
  7. 阿里云服务器 ,MySQL建库、建表
  8. Mysql学习笔记(三)运算符和控制流函数
  9. ssl1072-砝码称重【dp练习】
  10. 论述计算机硬件结构的理解论文,论述对汇编语言教学内容和方法及特点的认识与思考...
  11. svg如何平铺 html5,如何在HTML5中使用SVG
  12. [cocos2dx笔记015]关于cocos2dx Button三种状态说明
  13. Oracle 单实例 迁移到 RAC 实例 -- 使用导出导入方法
  14. 【设计鉴赏】精选字体设计鉴赏(三)
  15. 四级英语图表作文真题计算机,英语四级作文真题
  16. 常见嵌入式Web服务器比较
  17. 智能车K60学习笔记
  18. seo全攻略_SEO优化操作流程是怎样的?有哪些步骤?
  19. 世界上最远的距离-泰戈尔
  20. AspectJ的使用方法

热门文章

  1. python输出空心长方形_python3打印空心三角*形状
  2. 【SWAT】SWAT中预定义河网及流域
  3. vmware中的CPU占用率100%
  4. 小时候做过令人恶心的事 (很多哈,其中更有强到煮大.便的)
  5. Spring Boot 集成 JAP
  6. NTP服务器(GPS北斗授时服务器)的市场需求及性能分析
  7. 如何选择包装机?云易科告诉你!
  8. Deepchem构建基于分子指纹的神经网络模型
  9. Hyper-V之01 恢复Hyper-V管理界面中误删除的虚拟机
  10. Android 快速集成指南 - ShareSDK Wik