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

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

Facebook API と 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エラー

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

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

どんな助けでも大歓迎です、ありがとう!

ベストアンサー1

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ファイルに記載したとおり

おすすめ記事