2013-04-25 7 views
5

Ich bin nicht einmal sicher, wie man das Problem definiert, aber hier geht es.Umgang mit verschiedenen URL-Schemen in iOS (Facebook und Instagram)

Ich habe eine Anwendung, die Facebook SDK für die Benutzeranmeldung verwendet. Ich folgte dem Facebook-Autorisierungs-Tutorial. Ich bin mir nicht 100% ig sicher, wie es funktioniert, aber dieser Teil in meinem "AppDelegate.m" scheint wichtig zu sein.

- (BOOL)application:(UIApplication *)application 
      openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication 
     annotation:(id)annotation { 

    return [FBSession.activeSession handleOpenURL:url]; 
} 

So weit so gut. Jetzt möchte ich ein ähnliches Login für Instagram implementieren, damit der Benutzer auf seine Fotos zugreifen kann. Ich führe dieses Beispiel ohne ein Problem (https://github.com/crino/instagram-ios-sdk). Als ich das in mein Projekt importieren wollte, blieb ich stecken. Da in instagram Projekt gibt es auch eine Funktion in der

-(BOOL)application:(UIApplication *)application 
      openURL:(NSURL *)url 
sourceApplication:(NSString *)sourceApplication 
     annotation:(id)annotation { 

    return [self.instagram handleOpenURL:url]; 
} 

Jetzt AppDelegate (IGAppDelegate) ist kippe ich diese Funktion verwenden (da es ein Duplikat von Facebook ist) Gibt es eine Möglichkeit, diese beiden Funktion für Facebook zu verbinden und instagram (vielleicht mit einem "if" für verschiedene URLs). Oder bin ich verloren

PS: Ich habe bemerkt, dass, wenn ich meine Facebook Login App rufen die URL ist so etwas wie

fb4333597123414933: // autorisieren/# access_token = BAAGKI2vHLxUBANbDegkrdoc4GJWUZC2clqLAzxz8IxEBZBdEyjrD2oTaGZA0g2AbSGWgvEhONKM6xJWzLCALGUBguqUpor6kXu9ZBewusNZCUe6BOXYvX & expires_in = 5166254

in instagram es ist wie:

igfd725621c5e44198a5b8ad3f7a0ffa09: // autorisieren # access_tok en = 354172840.fd72562.bf6b3611632d4d00b6cef660ea9d9b6f

Antwort

9
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
    { 
     NSLog(@"url: %@", [url scheme]); 

     BOOL callBack; 
     // Facebook Call back checking. 
     if ([[url scheme] isEqualToString:@"facebook_url_schema"]) 
     { 
      callBack = [FBAppCall handleOpenURL:url sourceApplication:sourceApplication]; 
     } 
     // Instagram call back checking. 
     else if ([[url scheme] isEqualToString:@"instagram_url_schema"]) 
     { 
      callBack = [self.instagram handleOpenURL:url]; 
     } 
     return callBack;![enter image description here][1] 
    } 

enter image description here

+0

Was Beschreibung sehen Sie das Bild setzen in eingeben – AlxVallejo

+0

Kein Bedarf. URL-Schemas sind wichtig. – abhi

4

Swift: -

Beispiel für die Verwendung von Google+ und Facebook in der swift App, beide benötigen die OpenURL-Methode in der appDelegate.

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, 
    annotation: AnyObject?) -> Bool { 

    println("URL : \(url)") 
    if(url.scheme!.isEqual("fb1627825840806667")) { 
     println("Facebook url scheme") 

    return FBSDKApplicationDelegate.sharedInstance().application(
      application, 
      openURL: url, 
      sourceApplication: sourceApplication, 
      annotation: annotation) 

    } else { 

     println("Google+ url scheme") 

     return GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication, annotation: annotation) 

    } 
} 
0

Für Swift 2,0

//MARK: FACEBOOK , GOOGLE CALLBACK URL METHOD 
    //google-Firebase signin - IOS 8 
    func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool 
    { 
     let googleDidHandle = GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication!, annotation: annotation) 

     let facebookDidHandle = FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) 

     return facebookDidHandle || googleDidHandle 
    } 

    //google-Firebase signin - IOS 9 
    @available(iOS 9.0, *) 
    func application(application: UIApplication, 
        openURL url: NSURL, options: [String: AnyObject]) -> Bool { 

     let facebookDidHandle = FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as! String, annotation: options[UIApplicationOpenURLOptionsAnnotationKey]) 

     let googleDidHandle = GIDSignIn.sharedInstance().handleURL(url, sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as! String, annotation: options[UIApplicationOpenURLOptionsAnnotationKey]) 

     return facebookDidHandle || googleDidHandle 
    }