1.了解deeplink

详细的介绍可以在网上查询,这里简单说一下.这项技术主要是为了方便广告跳转而产生的.最大的例子就是淘宝,天猫,京东等购物APP.在第三方APP中点击广告链接直接跳转到对应的客户端的商品的详情中,节省用户的时间,一步到位.

2.自己APP实现deeplink需要的准备工作

通过Xcode添加URL Scheme跳转,操作步骤如下:
第一步找到URL Types的添加处:TARGETS-info-Url types.
第二步点击加号 添加Url Schemes 添加为当前APP的标识(bundle ID),为了第三方APP跳转

3.iOS端具体的实现过程

在Appdelegate.m中找到如下方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
此方法的作用就是在当前APP是其他APP通过URL打开时便会调用.在此处解析URL便可实现跳转到指定页面的需求 也就是deeplink技术
以下为淘宝给出的URL规范,用来调用淘宝客户端的
    宝贝详情 taobao://item.taobao.com/item.htm?id=12688928896宝贝搜索 taobao://s.taobao.com/?q=iphone店铺搜索 taobao://shopsearch.taobao.com/browse/shop_search.htm?q=iphone
首先,需要定制好跳转协议的格式 当前我们就是使用最简单的跳转协议.
com.deeplink://deeplink.htm?id=123456
com.deeplink 代表就是我们第2步时设置的 Url Schemes
deeplink.htm 可以设置为区别当前要跳转的页面的一个字符串
id=123456    一般代表页面的ID 用来请求数据
其次,便是在打开APP时获取到这个跳转协议,取出其中的值
    NSString *scheme = [url scheme];NSString *host = [url host];NSString *query = [url query];
之后便是判断,拿出需要的id进行跳转
if (scheme && [scheme isEqualToString:@"com.deeplink"]) {NSString *typeStr = [host componentsSeparatedByString:@"."].firstObject;if (typeStr && [typeStr isEqualToString:@"deeplink"]) {
//判断了当前要跳转的页面是和我们设置的 deeplink 标识有关的页面NSString *idStr = [query componentsSeparatedByString:@"="].lastObject;NSDictionary *dict = @{@"type":@"1",@"id":idStr};
说明:如果当前APP架构 window的rootController为Navigationcontroller的话变在此处取得window的rootcontroller进行跳转,由于我司项目根控制器是Tabbar所以无法直接实现push
可以参考我使用发送通知给主页控制器,然后通过主页控制器进行跳转.
值得注意的是 关于这个GCD延迟1秒执行的必要性.实验证明,如果不加,如需要被打开的APP不是处于后台活跃状态,那么将无法进行跳转,原因是因为并没有发送通知.
解决方法也是参考淘宝的跳转,在打开淘宝客户端后会有一定延迟才跳转到对应的商品页面.
关于接收到通知之后的跳转逻辑这里就不贴出代码了.
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{[[NSNotificationCenter defaultCenter] postNotificationName:@"DEEPLINK" object:nil userInfo:dict];});      

4.怎么使用协议跳转

NSString *urlString = @"com.deeplink://deeplink.htm?id=123456";
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:urlString]]) {//若安装了需要跳转的app->跳转到APPNSURL * url = [NSURL URLWithString:[urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];[[UIApplication sharedApplication] openURL:url];
}else{//若未安装需要跳转的app->跳转到APP的下载界面[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms-apps://itunes.apple.com/cn/app/appname/id1070087534?mt=8"]];//或者直接显示web端的页面
}

deepLink iOS 应用到自己APP 记录相关推荐

  1. iOS平台手机银行App大多存安全风险漏洞

    本文讲的是 :  iOS平台手机银行App大多存安全风险漏洞  ,1月15日消息,据国外媒体报道,苹果iPhone或iPad用户请注意了,iOS版本手机银行存在安全风险漏洞.研究机构IOActive ...

  2. jenkins编译H5做的android端编译卫士app记录

    jenkins编译H5做的android端编译卫士app记录 编译android相关操作 先安装linux下的sdk tools,在官方地址上Download Android Studio and S ...

  3. Appium+python自动化19-iOS模拟器(iOS Simulator)安装自家APP

    前言 做过iOS上app测试的小伙伴应该都知道,普通用户安装app都是从appstore下载安装,安装测试版本的app,一般就是开发给的二维码扫码安装, 或者开发给个.ipa的安装包文件,通过itoo ...

  4. iOS提交应用至App Store流程及真机调试 一,证书、配置文件

    前言:你要有苹果开发人员账号,我用的是个人账号.其次xcode为xcode 7,因为xcode 7须要 os x 系统 10.11 或更高的版本号, 所以os x 系统也须要 10.11 或更高的版本 ...

  5. 【业务篇】史上最全经验版用例之IOS和Android版APP版本更新、IOS版规避审核?

    一.IOS app设置苹果审核 为了app提交苹果能快速审核通过,故需设置app审核状态,隐藏部分敏感功能 1.线上app版本1.0.0,新版本app2.0.0测试通过,设置2.0.0版本app审核状 ...

  6. iOS 入门——Hello World app

    iOS 入门--Hello World app 作为Mac重度使用者以及iOS小白一枚(匿),我将为iOS 10 构建我们的第一个iOS应用程序 (著名的"Hello World" ...

  7. IOS开发之实现App消息推送(最新)

    IOS开发之实现App消息推送(最新) 标签: 推送最新AppStoreXCode6ios开发 2014-11-19 21:13  58412人阅读  评论(77)  收藏  举报   分类: IOS ...

  8. iOS开发UI篇—APP主流UI框架结构

    iOS开发UI篇-APP主流UI框架结构 一.简单示例 说明:使用APP主流UI框架结构完成简单的界面搭建 搭建页面效果:                                二.搭建过程和 ...

  9. 拉拢苹果用户,谷歌推出“从 iOS 转移到 Android” App

    整理 | 孙胜 出品 | CSDN(ID:CSDNnews) 谷歌近期公布了 Android 12 的第三个测试版本,该版本给用户带来了实用功能跟优质体验,例如滚屏截图.增强的自动旋转和游戏" ...

最新文章

  1. 数据库中存储与读取文件
  2. [crypto]-30-The Armv8 Cryptographic Extension在linux中的应用
  3. MFC学习RepositionBars
  4. 对抗思想与强化学习的碰撞-SeqGAN模型原理和代码解析
  5. Mysql报错130_Mysql报错Forcing close of thread 139 user: 'root'
  6. Ruby对象、变量和常量
  7. Spark on YARN的部署
  8. Leetcode刷题、常用算法汇总(Java版本)
  9. Julia :PyPlot库安装中需注意的问题
  10. Docker安装ik分词器
  11. 如何用Mac线刷小米手机
  12. 扁平化设计的流行配色方案
  13. 利用nginx搭建http和rtmp协议的流媒体服务器,用nginx搭建http/rtmp/hls协议的MP4/FLV流媒体服务器...
  14. CF407C Curious Array
  15. mysql中ddl和ddm_DDL与DML问题
  16. java的跨平台特性是指_如何理解JAVA的跨平台特性
  17. 如何根据当前时间获取下一个整五分钟
  18. 打开共享文件提示服务器空间不足,访问网络共享报告“服务器存储空间不足,无法处理此命令”...
  19. Proteus仿真STM32F103R6(一)
  20. Windows下Chcp命令的用法

热门文章

  1. 华为交换机系列异常流量抑制
  2. 利用人工智能(Magpie开源库)给一段中文的文本内容进行分类打标签
  3. 50个顶级开源营销应用程序
  4. 我的hadoop学习之路
  5. 8. 进制转化的函数
  6. 超级简单的jquery轮播图demo
  7. Spring 自动化装配Bean
  8. Entity Framework学习三:查询、插入、更新和删除操作
  9. Ext-第一课基本配置
  10. 切换阿里云maven源解决maven中央仓库下载太慢卡顿的问题