Подтвердить что ты не робот

Как обращаться с UIApplication handleOpenURL с несколькими URL-адресами

У меня есть приложение, которое будет использовать как API 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, но мне нужно решить, какой из них.

В моем делете приложения я прокомментировал опцию Instagram выше и оставил только Facebook. Как и ожидалось, Facebook будет работать нормально, но я получаю эту ошибку, когда я нажимаю авторизовать на Instagram:

Instagram URL error

Очевидно, что Facebook пытается обрабатывать URL-адрес возврата из Instagram, поэтому он будет ошибочным.

Возможно ли проверить URL-адрес, чтобы узнать, содержит ли он идентификатор приложения для каждой службы, которую я пытаюсь выполнить? Поэтому, если URL содержит идентификатор instagram, верните обработчик instagram, если он содержит идентификатор Facebook, а затем верните обработчик Facebook.

Любая помощь будет отличной, спасибо!

4b9b3361

Ответ 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