Обрабатывать два приложения: openURL: sourceApplication: аннотация
У меня есть 2 SDK, которым необходимо использовать application:openURL:sourceApplication:annotation
метод application:openURL:sourceApplication:annotation
. Один из них - FacebookSDK
а второй - GooglePlusSDK
.
Это методы:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation];
}
Мой вопрос в том, как можно перенести их в один метод? Каков наилучший способ?
Заранее спасибо.
Ответы
Ответ 1
Вероятно, вы можете сделать следующее:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
BOOL shouldOpen = [FBAppCall handleOpenURL:url sourceApplication:sourceApplication];
shouldOpen = shouldOpen ? shouldOpen : [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation];
return shouldOpen;
}
Ответ 2
Использовать логический оператор OR ||
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [FBAppCall handleOpenURL:url sourceApplication:sourceApplication] || [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation];
}
Быстрая версия
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String!, annotation: AnyObject) -> Bool {
return FBAppCall.handleOpenURL(url, sourceApplication: sourceApplication) || GPPURLHandler.handleURL(url, sourceApplication: sourceApplication, annotation: annotation)
}
Ответ 3
Более чистый способ (здесь, в Swift):
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String!, annotation: AnyObject) -> Bool {
var handled: Bool
if let facebook = url.scheme?.hasPrefix("fb") {
handled = FBAppCall.handleOpenURL(url, sourceApplication: sourceApplication)
} else {
handled = GPPURLHandler.handleURL(url, sourceApplication: sourceApplication, annotation: annotation)
}
// include any specific handling code as necessary
return handled
}
Ответ 4
Вы также можете поместить чек на базовый префикс URL
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
if FB URL prefix
//Call FB method
else
//Google plus method
}
Ответ 5
Я закончил:
- (BOOL)application:(UIApplication *)application //facebook & Google+
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
return( [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation]
||
[GPPURLHandler handleURL:url
sourceApplication:sourceApplication
annotation:annotation]
);
;
}