Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Handle two application:openURL:sourceApplication:annotation

I have 2 SDK's that needs to use the application:openURL:sourceApplication:annotation method. One is FacebookSDK and the second is GooglePlusSDK.

Those are the methods:

- (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];
}

My question is how is it possible to migrate them into one method? What is the best way?

Thanks in advance.

like image 476
ytpm Avatar asked Aug 28 '14 07:08

ytpm


3 Answers

Use logical OR operator ||

- (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];
}

Swift Version

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)
}
like image 167
Inder Kumar Rathore Avatar answered Oct 15 '22 21:10

Inder Kumar Rathore


You could probably do like this:

- (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;
}
like image 9
Peter Segerblom Avatar answered Oct 15 '22 20:10

Peter Segerblom


A cleaner way (here in Swift) would be:

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
}
like image 6
jmdecombe Avatar answered Oct 15 '22 20:10

jmdecombe