美文网首页
iOS两个应用间的跳转

iOS两个应用间的跳转

作者: GitArtOS | 来源:发表于2020-03-23 15:46 被阅读0次

    应用跳转的原理:
    从一个应用跳转到另一个应用,作为APP开发者,最熟悉的莫过于第三方登录,支付宝,微信支付时,那时候我们可能仅仅按照集成文档一步一步操作,在文档中配置很多类似URL Schemes

    如下:我加了个HAHA

    截屏2020-03-23下午3.20.34.png

    有人肯定好奇了,为什么这么干?好,回手掏;

    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://
    
    

    相关文章

      网友评论

          本文标题:iOS两个应用间的跳转

          本文链接:https://www.haomeiwen.com/subject/ydywyhtx.html