应用跳转的原理:
从一个应用跳转到另一个应用,作为APP开发者,最熟悉的莫过于第三方登录,支付宝,微信支付时,那时候我们可能仅仅按照集成文档一步一步操作,在文档中配置很多类似URL Schemes
如下:我加了个HAHA
有人肯定好奇了,为什么这么干?好,回手掏;
1. 协议补充
协议:双方互相遵守的一种规范,只有遵守共同的协议规范才能进行彼此的通信。比如我们最熟悉的网络协议——http协议。
URL
:资源的路径或地址。
在iOS中有一个专门用于包装资源路径的类——NSURL
。
一个完整URL的组成
例如:http://127.0.0.1/path?page=10
“http://”:协议类型
“127.0.0.1”:服务器ip地址
“/path”:资源存放的是路径
“page=10”:请求的参数
NSURL包装一个完整地址
NSURL *url = [NSURL URLWithString:@"http://127.0.0.1/path?page=10"];
NSLog(@"scheme(协议):%@",url.scheme);
NSLog(@"host(域名):%@",url.host);
NSLog(@"path(路径):%@",url.path);
NSLog(@"query(参数):%@",url.query);
2. iOS应用间跳转
在iOS中,从一个app打开另一个app,这必然牵扯到两个app之间的交互和通信,像这种涉及到整个应用程序层面的事情,苹果有一个专门的类来管理——UIApplication。在ios中UIApplication其实就是代表着应用程序,这点从它的命名就可以窥之。而我们要打开另一个应用程序,如何实现呢?很简单,其实就是UIApplication下面这个 的API
- (BOOL)openURL:(NSURL*)url;
估计你们都用过:
//拨打系统电话
NSURL *url = [NSURL URLWithString:@"tel://10086"];
[[UIApplication sharedApplication] openURL:url];
//发送系统短信
NSURL *url = [NSURL URLWithString:@"sms://16606666666"];
[[UIApplication sharedApplication] openURL:url];
2.1 实现两个app间的跳转
2.1.1 ios9.0以前
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
NSURL *url = [NSURL URLWithString:@"HAHA://"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}else{
NSLog(@"么的应用,请安装");
}
到这里如果你的系统是ios9.0以前,已经大大功告成了。但是,如果是9.0以后,请看下面。
2.1.1 ios9.0以后
配置协议白名单
在info.plist文件中增加一个 LSApplicationQueriesSchemes
字段,把它设置为数组类型,并配置需要跳转的协议名单;
<key>LSApplicationQueriesSchemes</key>
<array>
<!-- 微信 URL Scheme 白名单-->
<string>wechat</string>
<string>weixin</string>
<!-- 新浪微博 URL Scheme 白名单-->
<string>sinaweibohd</string>
<string>sinaweibo</string>
<string>sinaweibosso</string>
<string>weibosdk</string>
<string>weibosdk2.5</string>
<!-- QQ、Qzone URL Scheme 白名单-->
<string>mqqapi</string>
<string>mqq</string>
<string>mqqOpensdkSSoLogin</string>
<string>mqqconnect</string>
<string>mqqopensdkdataline</string>
<string>mqqopensdkgrouptribeshare</string>
<string>mqqopensdkfriend</string>
<string>mqqopensdkapi</string>
<string>mqqopensdkapiV2</string>
<string>mqqopensdkapiV3</string>
<string>mqzoneopensdk</string>
<string>wtloginmqq</string>
<string>wtloginmqq2</string>
<string>mqqwpa</string>
<string>mqzone</string>
<string>mqzonev2</string>
<string>mqzoneshare</string>
<string>wtloginqzone</string>
<string>mqzonewx</string>
<string>mqzoneopensdkapiV2</string>
<string>mqzoneopensdkapi19</string>
<string>mqzoneopensdkapi</string>
<string>mqzoneopensdk</string>
<!-- 支付宝 URL Scheme 白名单-->
<string>alipay</string>
<string>alipayshare</string>
</array>
3. 跳转到应用指定界面
想要跳转到指定界面,必然是上一个app告诉下一个app(被跳转的app)需要跳转到哪个界面,而如何告诉它这里便涉及到两个app的通信。我们从上面可以知道,两个app之间的跳转只需要配置一个scheme,然后通过UIApplication调用它的对象方法openURL:即可实现,除此之外再也没有实现任何代码了。而这之间是如何通信的呢?
答案依然是协议
,请看下面步骤:
3.1、在"HAHA://"协议后面的域名加上一些字段用来标记需要跳转的界面
- (IBAction)intoMore:(id)sender {
NSURL *url = [NSURL URLWithString:@"HAHA://Bindex"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[application openURL:URL options:@{} completionHandler:nil];
}else{
NSLog(@"么的应用,请安装");
}
}
3.2 来到被跳转的应用的AppDelegate类的.m文件中,监听其代理方法application:handleOpenURL:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
{
NSLog(@"url:%@",url.absoluteString);
NSLog(@"host:%@",url.host);
if ([url.host isEqualToString:@"Bindex"]) {
NSLog(@"进入Bindex界面");
//到此做界面的跳转
}
return YES;
}
4. 跳转各应用的URL,你么试一下,不行再改
蜂窝网络:prefs:root=MOBILE_DATA_SETTINGS_ID
*** — prefs:root=General&path=Network/***
Wi-Fi:prefs:root=WIFI
定位服务:prefs:root=LOCATION_SERVICES
个人热点:prefs:root=INTERNET_TETHERING
关于本机:prefs:root=General&path=About
辅助功能:prefs:root=General&path=ACCESSIBILITY
飞行模式:prefs:root=AIRPLANE_MODE
锁定:prefs:root=General&path=AUTOLOCK
亮度:prefs:root=Brightness
蓝牙:prefs:root=Bluetooth
时间设置:prefs:root=General&path=DATE_AND_TIME
FaceTime:prefs:root=FACETIME
设置:prefs:root=General
设置 prefs:root=SETTING
定位服务 prefs:root=LOCATION_SERVICES
键盘设置:prefs:root=General&path=Keyboard
iCloud:prefs:root=CASTLE
iCloud备份:prefs:root=CASTLE&path=STORAGE_AND_BACKUP
语言:prefs:root=General&path=INTERNATIONAL
定位:prefs:root=LOCATION_SERVICES
音乐:prefs:root=MUSIC
Music Equalizer — prefs:root=MUSIC&path=EQ
Music Volume Limit — prefs:root=MUSIC&path=VolumeLimit
Network — prefs:root=General&path=Network
Nike + iPod — prefs:root=NIKE_PLUS_IPOD
Notes — prefs:root=NOTES
Notification — prefs:root=NOTIFICATIONS_ID
Phone — prefs:root=Phone
Photos — prefs:root=Photos
Profile — prefs:root=General&path=ManagedConfigurationList
Reset — prefs:root=General&path=Reset
Safari — prefs:root=Safari
Siri — prefs:root=General&path=Assistant
Sounds — prefs:root=Sounds
Software Update — prefs:root=General&path=SOFTWARE_UPDATE_LINK
Store — prefs:root=STORE
Twitter — prefs:root=TWITTER
Usage — prefs:root=General&path=USAGE
Wallpaper — prefs:root=Wallpaper
电话 mobilephone://
备忘录 mobilenotes://
墨客 com.moke.moke-1://
名片全能王 camcard://
扫描全能王 camscanner://
TuneIn Radio tunein:// 或 tuneinpro://
OfficeSuite mobisystemsofficesuite://
WPS Office KingsoftOfficeApp://
Line line://
1Password onepassword://
Clear(著名的Todo应用) clearapp://
Chrome谷歌浏览器 googlechrome://
Calendars 5 calendars://
GoodReader 4 com.goodreader.sendtogr://
PDF Expert 5 pdfexpert5presence://
Documents 5 rdocs://
nPlayer nplayer-http://
GPlayer gplayer://
AVPlayer HD AVPlayerHD://
AVPlayer AVPlayer://
Ace Player aceplayer://
12306订票助手 trainassist://
金山词霸 com.kingsoft.powerword.6://
节奏大师 tencentrm://
赶集生活 **://
凤凰新闻 comIfeng3GifengNews://
高铁管家 gtgj://
飞信 fetion://
豆瓣FM doubanradio://
大智慧 dzhiphone://
布卡漫画 buka://
爱奇艺PPS ppstream://
哔哩哔哩动画 bilibili://
56视频 com.56Video://
365日历 rili365://
58同城 wbmain://
遇见 iaround://
陌陌 momochat://
有道词典 yddict://
优酷 youku://
掌阅iReader iReader://
艺龙旅行 elongIPhone://
迅雷+迅雷云播 thunder://
熊猫公交 wb1405365637://
携程无线 CtripWireless://
无线苏州 SuZhouTV://
唯品会 vipshop://
微视 weishiiosscheme://
微拍 wpweipai://
旺信 wangxin://
网易公开课 ntesopen://
网易将军令 netease-mkey://
万年历 youloft.419805549://
土豆视频 tudou://
同花顺 amihexin://
天涯社区 tianya://
天气通Pro sinaweatherpro://
天气通 sinaweather://
墨迹天气 rm434209233MojiWeather://
淘宝旅行 taobaotravel://
人人 renrenios://
蜻蜓FM qtfmp://
浦发银行 wx1cb534bb13ba3dbd://
招商银行 cmbmobilebank://
建设银行 wx2654d9155d70a468://
工商银行 com.icbc.iphoneclient://
酷我音乐 com.kuwo.kwmusic.kwmusicForKwsing://
酷狗音乐 kugouURL://
今日头条 snssdk141://
京东 openApp.jdMobile://
QQ mqq://
微信 wechat:// 或 weixin://
QQ音乐 qqmusic://
QQ斗地主 tencent382://
QQ浏览器 mttbrowser://
QQ安全中心 qmtoken://
QQ国际版 mqqiapi://
腾讯新闻 qqnews://
腾讯微云 weiyun://
腾讯地图 sosomap://
腾讯企业邮箱 qqbizmailDistribute2://
腾讯手机管家 mqqsecure://
腾讯视频 tenvideo:// 或 tenvideo2:// 或 tenvideo3://
腾讯微博 TencentWeibo://
天天星连萌 tencent100689806://
天天爱消除 tencent100689805://
天天酷跑 tencent100692648://
天天飞车 tencent100695850://
PPTV pptv://
爱奇艺视频 qiyi-iphone://
暴风影音 com.baofeng.play://
保卫萝卜2 wb2217954495://
保卫萝卜 wb1308702128://
百度音乐 baidumusic://
百度视频 baiduvideoiphone:// 或 bdviphapp://
百度糯米 bainuo://
百度魔图 photowonder://
百度魔拍 wondercamera://
百度地图 baidumap://
百度导航 bdNavi://
百度 baiduboxapp:// 或 BaiduSSO://
搜狗输入法 com.sogou.sogouinput://
搜狐视频 sohuvideo-iphone:// 或 sohuvideo://
搜狐新闻 sohunews://
随手记 FDMoney://
天天动听 ttpod://
挖财记账 wacai://
威锋网 com.weiphone.forum://
新浪微博 weibo:// 或 sinaweibo://
网易邮箱 neteasemail://
高德导航 Autonavi://
百度输入法 BaiduIMShop://
百度贴吧 com.baidu.tieba://
淘宝 taobao://
天猫 tmall://
支付宝 alipay://
旺旺卖家版 wangwangseller://
百度云 baiduyun://
网易新闻 newsapp://
UC浏览器 ucbrowser://
E-Mail MESSAGE://
网友评论