2014-08-28 16 views
7

Ho 2 SDK che devono utilizzare il metodo application:openURL:sourceApplication:annotation. Uno è FacebookSDK e il secondo è GooglePlusSDK.Gestire due applicazioni: openURL: sourceApplication: annotation

Quelli sono i metodi:

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

mia domanda è come è possibile eseguirne la migrazione in un unico metodo? Qual è il modo migliore?

Grazie in anticipo.

+0

si fa a non determinare in base alla url base nell'uso di un semplice 'se affermazione'? Gli schemi URL non saranno diversi? – Popeye

risposta

8

Probabilmente si potrebbe fare come questo:

- (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; 
} 
+0

Grazie. Mi hai salvato il tempo. Benedizioni. – Smita

+0

shouldOpen | = [GPPURLHandler handle ..] –

20

Usa operatore logico 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]; 
} 

Swift versione

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

Si può anche mettere il controllo sul prefisso di base 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 
} 
6

un modo più pulito (qui a Swift) sarebbe:

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 
} 
2

ho finito per fare:

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

    ; 
} 
Problemi correlati