IOSのURL Schemeの使用

4142 ワード

詳しく説明【iOS開発】を使って別のアプリ(URL SchemeとopenURL)を開くhttps://www.jianshu.com/p/0811ccd6a65d
参照リンク:https://blog.csdn.net/wbw1985/article/details/26264029 http://blog.sina.com.cn/s/blog_5673c12f0100qd6i.html第一:URL Schemeとは
AndroidのURL Schemeと同様に、アプリ同士の呼び出しを容易にするために設計されています.URLのようなリンクで、システムのOpenURlでappを開き、いくつかのパラメータを渡すことができます.各URLは1つのアプリを一意に識別する必要があります.もしあなたが設定したURLが他のアプリのURLと衝突した場合、あなたのアプリは必ずしも呼び出されるとは限りません.なぜなら、アプリがインストールされている間にシステムにこのアプリのURL Schemeを登録しているからです.もしあなたが一致しているが後でインストールされている場合、システムはあなたのアプリを呼び出すことはありません.あなたのアプリで設定したURL schemeが上書きされているからです.
もちろんシステムアプリのURL Schemeは優先度が高いので、システムアプリのURL Schemeの登録呼び出しを上書きできるとは思わない.
       
1.  Mail
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://[email protected]"]]
    2.    
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://18688886666"]];
    3.  SMS
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:18688886666"]];


第2:URL Schemeはどんな作用があります:
IOSシステムではアプリ同士が隔離されており、Androidのように各コンポーネントが独立した機能として他のアプリに呼び出されることはよく知られていますが、IOSシステムでは支払い、検索ジャンプ、ナビゲーションなどの3つの機能のようなアプリを跨ぐ機能を完成させる必要があります.どのように実現するか、アップルはURL Schemeを使ってこの機能を実現しました.各アプリが設計したアップルの統一規範に合致するURL Schemeを通じて、システムは自動的に関連アプリを呼び出してあなたの要求を完成します.
例えば、私たちのアプリは支付宝の三者決済機能、私のアプリは微信を使って良い文章を共有する必要があります.この時、URL Schemeを通じてこれらのデータを支付宝アプリや微信アプリに伝えることができます.システムはこれらのアプリのURL Schemeを通じてこれらのアプリを調整して、あなたが必要とするアプリをまたぐ機能を完成します.まず、あなたのアプリを構成して、他の人に私のアプリを開けられます.
iOSプログラムにカスタムプロトコルのサポートを追加するのは便利で、プログラムのInfoだけです.plistはURL typesノードを追加すればいいです.このノードでは、このプログラムがサポートするカスタムプロトコル名を設定することができます.http、ftpのように、一般的にプログラム英語名に設定することができます.タオバオクライアントにtaobaoが設定されているように、taobao://という形式のURLがタオバオクライアントのAppに関連付けられます.
次にあなたのURL Schemeを使ってあなたのアプリを呼び出す要求を処理します.
もしあなたのアプリがTestBであれば、処理に成功したSchemeにTestBAPP://callsuccessが含まれている場合は、他のアプリを呼び出すことに成功したことを示します.そうでなければ、TestAAPPのような別のAPPがあなたのAPPを呼び出した場合、あなたのAPPDelegateに次の関数を追加し、処理を実現します.ここでは、TestAAPP呼び出しに成功した識別TestAAPP://callsuccessに直接戻ります.
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url  
{  
    // Do something with the url here  
    if (!url)  
    {  
        return NO;  
    }  
    NSString *handleUrl = [url absoluteString];  
    if ([handleUrl isEqualToString:@"TestBApp://callsuccess"]) {  
        return YES;  
    }else{  
        NSString *urlstr = @"TestAAPP:/com.baidu.sidepath.TestA&_callback=TestAApp://callsuccess";  
        NSURL *handlbackeUrl = [NSURL URLWithString:urlstr];  
        [[UIApplication sharedApplication] openURL:handlbackeUrl];  
      
    }

直接callbackに戻りたくなくてページを起動したい場合は、アプリケーションが起動しているかどうかを考慮して、次のように判断します.
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    NSString *handleUrl = [url absoluteString];
    if ([handleUrl isEqualToString:@"TestBApp://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というページが起動します.そして、このページに戻るボタンを追加して、呼び出しアプリに戻ることができます.
再度TestAAPpの中でURl Schemeを使ってあなたのAPP NSURL*url=[NSURL URLWithString:urlstr];[[UIApplication sharedApplication] openURL:url];