App應用程序互相跳轉

1. 應用場景

1) 使用第三方用戶登錄,需要用戶授權,還需要"返回到調用的程序,同時返回授權的用戶名"

2) 應用程序推廣,網易彩票,設置-推薦應用-有很多應用程序圖標
-如果本機已經安裝過,會直接跳轉到另外一個應用程序
-軟件的廣告,推廣結果,后續會有一些列的金錢上的結算

  1. 支付寶,第三方支付,淘寶,電話費充值。。。

2. 要打開本機上的其他應用程序,需要設置schemes,自定義的協議頭,可以打開其他的應用程序

你也許會遇到一下問題:

1、 canOpenURL 方法不執行?

2、“This app is not allowed to query for scheme xxx”

3、“This app is not allowed to query for scheme xxx”

.官網的解釋:(就是在info.plist 文件里添加 LSApplicationQueriesSchemes)

If you call the “canOpenURL” method on a URL that is not in your whitelist, it will return “NO”, even if there is an app installed that has registered to handle this scheme. A “This app is not allowed to query for scheme xxx” syslog entry will appear.

If you call the “openURL” method on a URL that is not in your whitelist, it will fail silently. A “This app is not allowed to query for scheme xxx” syslog entry will appear.

在info.plist文件里,添加

 <key>LSApplicationQueriesSchemes</key>
 <array>
 <string>urlscheme1</string>
 <string>urlscheme2</string>
 <string>urlscheme3</string>
 <string>urlscheme4</string>
</array> 

跳轉的代碼如下:

- (IBAction)openWangyi:(id)sender
 {
// 跳轉到其他應用程序
// schemes: 網易的scheme wangyi
NSURL *url = [NSURL URLWithString:@"wangyi://view?newsid=201410130001"];

// 判斷本機是否安裝了目標程序
if ([[UIApplication sharedApplication] canOpenURL:url]) {
   // [[UIApplication sharedApplication] openURL:url];// 過時方法,沒效果
  [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
} else {
    NSLog(@"沒有安裝,可以再給定下載地址,前往");
  }
}

判斷設備是否安裝了某個app,在info.plist 文件添加:例如 app的名字:testA

  <key>CFBundleURLTypes</key>
  <array>
<dict>
    <key>CFBundleURLSchemes</key>
    <array>
        <string>testA</string>
    </array>
</dict>
</array>

IOS 推薦使用,一下方法打開app
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];

3. 新浪微博的授權界面說明:

1> 在新浪微博中,本身不能直接跳轉到該界面
2> 用其他應用程序打開時,如果scheme時weibo://oaauth,直接進入此界面
3> 如果直接點擊,返回,返回調用放應用程序
4> 如果點擊表格行中的用戶名,直接返回用戶信息給調用應用程序

4. 如果要返回調用的應用程序,需要知道調用我們的應用程序的scheme

/** 只要是由其他應用程序打開的,就會調用此方法 /
/
* URL 就是其他應用程序,打開當前程序使用的URL */
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

openURL 是打開當前應用程序的url
sourceApplication 是當開當前應用程序的源程序的BundleId

提示:一旦重寫了新方法,舊方法就不再被執行
但是:很多第三方框架,都建議兩個方法全都寫

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

5、如何傳參數?

1、其實它的傳參數,是在 @":// " , 后面的。它的作用是,根據參數做想要的做的邏輯。
2、點擊跳轉時,首先會調用該方法,所以,最先在該方法里做邏輯判斷。
3、你可以根據 下面的方法去獲取:

  - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options

注意一下:是舊設備的話,需要使用舊的方法,否則會閃退,不知道是Xcode 8的原因還是,設備的原因,模擬器是不會閃退。 推薦開發時使用新舊方法,這樣就可以滿足不同的設備了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容