iOS-調用Custom URL Scheme

Scheme 配置


11.png

在其他應用里就可以用以下語句啟動你的app

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"BProject://"]];```
當然你也可以

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"AProject://"]];```
在自定義了 URL scheme 的應用中,app delegate 必須實現(xiàn)以下方法:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
                                       sourceApplication:(NSString *)sourceApplication
                                              annotation:(id)annotation```
例如,假設我們使用以下的 URL scheme,我們可以像這樣創(chuàng)建一個 URL:

NSString *customURL = @"BProject://?action=play&data=12345";

在 web 開發(fā)中,字符串 ?action=play&data=12345 被稱作查詢詢串(query string)。
在被調用(設置了自定義 URL)的應用的 app delegate 中,獲取參數(shù)的代碼如下:
  • (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
    sourceApplication:(NSString *)sourceApplication
    annotation:(id)annotation
    {
    NSLog(@"Calling Application Bundle ID: %@", sourceApplication);
    NSLog(@"URL scheme:%@", [url scheme]);
    NSLog(@"URL query: %@", [url query]);

    return YES;
    }```
    以上代碼在應用被調用時的輸出為:

Calling Application Bundle ID: com.hunantv.app
URL scheme:BProject
URL query: action=play&data=12345

額外功能
如果你想啟動一個頁面那么,此時要考慮你的應用是否已經(jīng)啟動,可以如下判斷使用:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url  
  sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{  
    NSString *handleUrl = [url absoluteString];  
    if ([handleUrl isEqualToString:@"BProject://callsuccess"]) {  
        return YES;  
    }else{  
        UINavigationController *vc = (UINavigationController *)_window.rootViewController;  
        if (vc == nil) {  
            PathViewController *controller = [[PathViewController alloc] initWithNibName:@"PathViewController" bundle:nil];  

            self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];  
            self.mUINavigationController = [[UINavigationController alloc] init];  

            [self.mUINavigationController pushViewController:controller animated:YES];  
            [self.window addSubview:self.mUINavigationController.view];  

            // Override point for customization after application launch.  
            self.window.backgroundColor = [UIColor whiteColor];  
            [self.window makeKeyAndVisible];  
        }  
        return YES;  
    }
  }```
也就是把appdelegate里面的didFinishLaunchingWithOptions初始化app的代碼拷貝進去。此時會啟動PathViewController這個頁面。然后在這個頁面里面可以添加一個返回按鈕來返回到調用APP。

再次 在TestAAPp里面使用URl Scheme調起你的APP
  • (void)buttonPressed:(UIButton *)button
    {
    NSString *customURL = @"BProject://play/12345";

    if ([[UIApplication sharedApplication]
    canOpenURL:[NSURL URLWithString:customURL]])
    {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
    }
    else
    {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL error"
    message:[NSString stringWithFormat:
    @"No custom URL defined for %@", customURL]
    delegate:self cancelButtonTitle:@"Ok"
    otherButtonTitles:nil];
    [alert show];
    }
    }```
    注意
    如果你是iOS9系統(tǒng),由于iOS9為了安全提出了白名單概念,你必須在TestAAPp的info.plist里面配置以下信息

111.png

白名單上限只有50個。

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

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

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,502評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,716評論 25 709
  • 生命的基本單位與最初動力都是復制因子,它制造了宇宙中所有的復制。 復制因子最終因機緣巧合,由小顆粒隨機聚合而成。隨...
    極致節(jié)儉閱讀 345評論 0 0
  • 1 朋友忙了大半年,準備給自己放個假出去旅游一趟。 選擇旅行團的時候,朋友挑了最貴的。一起去的朋友勸她說:“你為什...
    路汐同學閱讀 587評論 2 4
  • 每當夜深人靜,我躺在學校宿舍的床上,睡覺前,總會不經(jīng)意的去看窗外的圓月;而這總讓我突然之間對家的思念更濃厚許...
    _墨竹閱讀 272評論 0 0

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