iOS應用程式開發之應用間的跳轉(用著微信等第三方分享登陸),ios跳轉

來源:互聯網
上載者:User

iOS應用程式開發之應用間的跳轉(用著等第三方分享登陸),ios跳轉
 

  • 簡介
  • 配置和實現
  • 判斷應用啟動方式
  

一、簡介

 

最實際項目開發中,我們難免會遇到需要從一個應用跳轉到另一個應用的情況。比如分享,實際就是一種應用間的跳轉。但是有時候我們需要實現自己的兩個應用間的跳轉,以便可以推廣我們其他的應用。這個時候我們需要使用UIApplication的openURL:的方法

  

二、配置

 

️註冊自訂的URL

 

首先被啟動的應用需要向iPhone註冊一個自訂URL協議。這是在你的專案檔夾的info.plist檔案進行的

 

1. 右鍵,選擇“Add Row”, Key值選擇“URL types”
2. 開啟“Item 0″,然後為該key增加一個URL identifier。可以是任何值,但建議用“反網域名稱”(例如 “com.open.url”)。
3. 在“Item 0”下再加一行。
4. 選擇“URL Schemes” 作為Key。
5. 輸入你的URL協議名 (例如“openurl1://” 應寫做“openurl”)。如果有必要,你可以在這裡加入多個協議。

 

圖解:

 

 

️代碼部分(在另外的程式中)

 
- (void)viewDidLoad{    [super viewDidLoad];        UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];    btn.frame = CGRectMake(100, 100, 120, 50);    [btn setTitle:@"測試123" forState:UIControlStateNormal];    [btn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];    btn.titleLabel.font = [UIFont systemFontOfSize:14.0];    [btn setBackgroundColor:[UIColor redColor]];;    [btn addTarget:self action:@selector(btnClick) forControlEvents:UIControlEventTouchUpInside];        [self.view addSubview:btn];}- (void)btnClick{    NSURL * myURL_APP_A = [NSURL URLWithString:@"openurl1://"];    if ([[UIApplication sharedApplication] canOpenURL:myURL_APP_A]) {        NSLog(@"canOpenURL");        [[UIApplication sharedApplication] openURL:myURL_APP_A];    }}
  

三、判斷應用的啟動方式

 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
 

 通過AppDelegate裡面的回調方法,可以確定應用的啟動方式。launchOptions包含了我們需要的參數

 
說明:當應用程式啟動時執行,應用程式啟動入口。只在應用程式啟動時執行一次。application參數用來擷取應用程式的狀態、變數等,值得注意的是字典參數:(NSDictionary *)launchOptions,該參數儲存程式啟動的原因。
 
1.若使用者直接啟動,lauchOptions內無資料;
2.若由其他應用程式通過openURL:啟動,則UIApplicationLaunchOptionsURLKey對應的對象為啟動URL(NSURL),UIApplicationLaunchOptionsSourceApplicationKey對應啟動的源應用程式的bundle ID (NSString);
3.若由本地通知啟動,則UIApplicationLaunchOptionsLocalNotificationKey對應的是為啟動應用程式的的本地通知對象(UILocalNotification);
4.若由遠程通知啟動,則UIApplicationLaunchOptionsRemoteNotificationKey對應的是啟動應用程式的的遠程通知資訊userInfo(NSDictionary);
 
其他key還有UIApplicationLaunchOptionsAnnotationKey,UIApplicationLaunchOptionsLocationKey,
UIApplicationLaunchOptionsNewsstandDownloadsKey。 如果要在啟動時,做出一些區分,那就需要在下面的代碼做處理。 比如:應用可以被某個其它應用調起(作為該應用的子應用),要實現單點登入,那就需要在啟動代碼的地方做出合理的驗證,並跳過登入
 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{    NSLog(@"%@", launchOptions);    NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];    if(url){}    NSString *bundleId = [launchOptions objectForKey:UIApplicationLaunchOptionsSourceApplicationKey];    if(bundleId){}    UILocalNotification * localNotify = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];    if(localNotify){}    NSDictionary * userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];    if(userInfo){}        return YES;}
最後補充一點,在開發中iOS 9 以上會出現canOpenURL: failed for URL: "ABC://app/*******/" - error: "This app is not allowed to query for scheme ABC"的錯誤,

由於IOS加入對使用者隱私以及禁止掃描系統資訊的控制,目前通過canOpenURL的方法來判斷使用者是否安裝特定app,則會出現-canOpenURL: failed for URL: "ABC://app/*******/" - error: "This app is not allowed to query for scheme ABC"的錯誤,

同時也返回NO,直接通過openUrl也是沒有反應。具體原因可以參考文章:Quick Take on iOS 9 URL Scheme Changes。

修改起來很簡單,只需要在plist中加入ABC的白名單即可,如:

<key>LSApplicationQueriesSchemes</key>

<array>

<string>ABC</string>

</array>

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.