iOS app 間的跳轉(zhuǎn)及通信

需要明白的名詞

  • URL: 全球統(tǒng)一資源定位符
  • 協(xié)議頭: http:// https:// file:// ftp://
  • 地址: www.baidu.com www.itcast.cn/iOS.index
  • URL Scheme: 自定義協(xié)議頭 --> 給當前程序起個名字
    只要添加了URL Scheme的程序運行了. 那么URL Scheme就會被系統(tǒng)記錄.(只要運行一次, 無論之后是否在運行, 都可以打開 -->類似于 windos的快捷方式)
    此時, 如果A程序運行了. 并調(diào)用openURL方法, 優(yōu)先在系統(tǒng)內(nèi)部進行查找. 如果找到了就會發(fā)生跳轉(zhuǎn)行為.

A應用跳轉(zhuǎn)B應用

  • 首先在B應用info.plist配置一下信息
WechatIMG1.jpeg
  • 在A應用中添加跳轉(zhuǎn)代碼
//如果可以跳轉(zhuǎn)這個程序, 就跳轉(zhuǎn)
    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"weixin://"]]) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"weixin://"]];
//應用間通訊,講需要傳遞的信息 拼接在URl后面
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"weixin://timeline"]];
    }

注意:iOS9的變化
1. 在iOS9之前, 是沒有彈窗的. 彈窗只會出現(xiàn)在首次的URLScheme跳轉(zhuǎn)
2. 對canOpenURL進行了白名單限制

 之前為了邏輯嚴謹, 以及判斷某個程序是否在手機中存在. 會調(diào)用一個canOpenURL方法.
 如果使用了canOPenURL方法, 那么還需要在plist中. 添加一個信任白名單. LSApplicationQueriesSchemes. 只有添加在這里的Scheme, 才能發(fā)生跳轉(zhuǎn). 白名單最多50個. 
 注意: 只是使用openURL方法, 不會受到任何影響.
WechatIMG2.jpeg
  • B應用的代碼實現(xiàn)
    有兩種實現(xiàn)思路可以在appDelegate中直接處理
    也可以在appDelegate添加一個NSURL屬性,在控制器里進行處理
// iOS9新版API
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
    self.url = url;
    return YES;
}
// 建議使用這個來適配iOS9以下系統(tǒng)
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation
{
}

在根控制器里的實現(xiàn)

-(void)viewDidLoad {
    [super viewDidLoad];
    NSURL * url = ((AppDelegate *)[UIApplication sharedApplication].delegate).url;
   ;
    if(url){
        //顯示一下從A獲取的url,url = weixin://timelineage,host = timeline
        self.label.text = [NSString stringWithFormat:@"url = %@,host = %@",[url absoluteString],[url host]];
        //根據(jù)傳過來的url的host進行一些操作
        if ([[url host]isEqualToString:@"timeline"]) {
            //跳轉(zhuǎn)到第二個界面.或者根據(jù)其他操作
            [self performSegueWithIdentifier:@"second" sender:nil];
        }
    }
}
注意
  • iOS9 需要配置白名單
  • h5打開app,一般需要在Safari里打開。(京東,淘寶好像可以在其他瀏覽器打開不知道為什么)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容