兩個App之間調起通訊

前言

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

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

過程

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

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

Test1工程配置

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

Test2工程配置

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

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。orm

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應用的調用,獲取到相應的參數了。string

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

Test1打印日誌

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

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

Test2打印日誌

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

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

相關文章
相關標籤/搜索