兩個App之間調起通訊

前言

常用一些app的分享功能,好比點擊QQ分享,就從app打開(跳轉到)QQ,而後分享完以後又回到咱們的app,那麼這是怎樣實現的呢?app

假設有這麼一個需求,由app1跳轉到app2,當app2完成任務以後,要把app2中的某些信息傳到app1中(假設咱們本身的程序是app1)測試

過程

咱們建立兩個新的工程,一個叫Test1,一個叫Test2。url

本篇文章將使用Test1做爲第一個app的URL Schemes,Test2做爲第二個app的URL Schemes日誌

Test1工程配置

因爲iOS9.0以後跳轉URL Schemes須要將添加白名單
圖1
對於URL Schemes中的Test1是本應用留給其餘應用調用的。code

Test2工程配置

圖2
對於URL Schemes中的Test2是本應用留給其餘應用調用的。orm

Test1工程中測試代碼

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        // Test2是在Test2這個項目的info.plist中配置的URL Schemes
        if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"Test2://"]]) {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"Test2://success=1&&name=test2"]];
        }
        return YES;
    }
    - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
        NSString *str = [[url host] stringByRemovingPercentEncoding];
        NSLog(@"%@---%@",str, url.absoluteString); 
        return YES;
    }

咱們首先須要判斷手機是否安裝了應用Test2,經過Test2工程公開的URL Schemes來判斷,即Test2://。須要傳參數時,是經過URL參數來傳的。如:Test2://success=1&&name=test2就是一個URL。string

Test2工程中測試代碼

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
        NSString *str = [[url host] stringByRemovingPercentEncoding];
        NSLog(@"%@---%@",str, url.absoluteString); 
        [self performSelector:@selector(goBackToApp1) withObject:nil afterDelay:2];
        return YES;
    }
    - (void)goBackToApp1 {
        if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"Test1://"]]) {
            [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"Test1://loginSuccess=1"]];
        }
    }

咱們在- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url處理來自Test1應用的調用,獲取到相應的參數了。it

當咱們處理數據完成,須要反饋給Test1時,就須要調用經過Test1://loginSuccess=1調用回到Test1並將狀態帶回去。io

Test1打印日誌

2016-06-05 23:23:09.807 test1[1277:219009] loginSuccess=1---Test1://loginSuccess=1

說明參數能從Test2正確地傳遞過來。form

Test2打印日誌

2016-06-05 23:22:15.008 test2[1243:216871] success=1&&name=test2---Test2://success=1&&name=test2

說明參數能從Test1正確地傳遞過來。

相關文章
相關標籤/搜索