web-dev-qa-db-ja.com

複数のURLを持つUIApplication handleOpenURLを処理する方法

私はFacebookとInstagram APIの両方を使用するアプリを持っていますが、どちらもこのデリゲートメソッドを使用する必要があります。

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

    return [PFFacebookUtils handleOpenURL:url];

}

これはInstagramによって提供されるコードです。

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

    return [self.instagram handleOpenURL:url];

}

ご覧のとおり、返すことができるURLハンドラは1つだけなので、これは問題ですが、どちらを処理するかを決定できる必要があります。

私のアプリデリゲートでは、上のInstagramオプションをコメントアウトし、Facebookのみを残しました。予想どおり、Facebookは問題なく動作しますが、Instagramで[承認]をタップするとこのエラーが発生します。

Instagram URL error

明らかに、FacebookはInstagramからの戻りURLを処理しようとしているため、エラーになります。

私が試している各サービスのアプリIDが含まれているかどうかを確認するためにURLをチェックすることはもっともらしいですか?したがって、URLにInstagram IDが含まれている場合はInstagramハンドラーを返し、Facebook IDが含まれている場合はFacebookハンドラーを返します。

どんな助けでも素晴らしいです、ありがとう!

24
Kyle Begeman

FacebookとInstagramの両方でサービスのカスタムURLスキームを設定していたので、それを使用してURLをフィルタリングします。

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

    if ([[url scheme] isEqualToString:INSTAGRAM_SCHEME])
        return [self.instagram handleOpenURL:url];

    if ([[url scheme] isEqualToString:FACEBOOK_SCHEME])
        return [PFFacebookUtils handleOpenURL:url];

    return NO;

}

変数を次のように定義する場所

#define INSTAGRAM_SCHEME @"ig12345678910"
#define FACEBOOK_SCHEME  @"fb12345678910"

あなたがInfo.plistファイル

67
coneybeare