Как обращаться с 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.
Любая помощь будет отличной, спасибо!
Ответы
Ответ 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