App應(yīng)用程序互相跳轉(zhuǎn)

1. 應(yīng)用場(chǎng)景

1) 使用第三方用戶登錄,需要用戶授權(quán),還需要"返回到調(diào)用的程序,同時(shí)返回授權(quán)的用戶名"

2) 應(yīng)用程序推廣,網(wǎng)易彩票,設(shè)置-推薦應(yīng)用-有很多應(yīng)用程序圖標(biāo)
-如果本機(jī)已經(jīng)安裝過,會(huì)直接跳轉(zhuǎn)到另外一個(gè)應(yīng)用程序
-軟件的廣告,推廣結(jié)果,后續(xù)會(huì)有一些列的金錢上的結(jié)算

  1. 支付寶,第三方支付,淘寶,電話費(fèi)充值。。。

2. 要打開本機(jī)上的其他應(yīng)用程序,需要設(shè)置schemes,自定義的協(xié)議頭,可以打開其他的應(yīng)用程序

你也許會(huì)遇到一下問題:

1、 canOpenURL 方法不執(zhí)行?

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

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

.官網(wǎng)的解釋:(就是在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> 

跳轉(zhuǎn)的代碼如下:

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

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

判斷設(shè)備是否安裝了某個(gè)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. 新浪微博的授權(quán)界面說(shuō)明:

1> 在新浪微博中,本身不能直接跳轉(zhuǎn)到該界面
2> 用其他應(yīng)用程序打開時(shí),如果scheme時(shí)weibo://oaauth,直接進(jìn)入此界面
3> 如果直接點(diǎn)擊,返回,返回調(diào)用放應(yīng)用程序
4> 如果點(diǎn)擊表格行中的用戶名,直接返回用戶信息給調(diào)用應(yīng)用程序

4. 如果要返回調(diào)用的應(yīng)用程序,需要知道調(diào)用我們的應(yīng)用程序的scheme

/** 只要是由其他應(yīng)用程序打開的,就會(huì)調(diào)用此方法 /
/
* URL 就是其他應(yīng)用程序,打開當(dāng)前程序使用的URL */
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

openURL 是打開當(dāng)前應(yīng)用程序的url
sourceApplication 是當(dāng)開當(dāng)前應(yīng)用程序的源程序的BundleId

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

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

5、如何傳參數(shù)?

1、其實(shí)它的傳參數(shù),是在 @":// " , 后面的。它的作用是,根據(jù)參數(shù)做想要的做的邏輯。
2、點(diǎn)擊跳轉(zhuǎn)時(shí),首先會(huì)調(diào)用該方法,所以,最先在該方法里做邏輯判斷。
3、你可以根據(jù) 下面的方法去獲?。?/p>

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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