2013-04-25 18 views
5

Nie jestem nawet pewien, jak zdefiniować problem, ale oto on idzie.Obsługa różnych schematów adresów URL w iOS (Facebook i Instagram)

Mam aplikację, która używa Facebooka SDK do logowania użytkownika. Postępowałem zgodnie z samouczkiem autoryzacji na Facebooku. Nie jestem w 100% pewny, jak to działa, ale ta część mojego "AppDelegate.m" wydaje się ważna.

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

    return [FBSession.activeSession handleOpenURL:url]; 
} 

Jak dotąd tak dobrze. Teraz chcę zaimplementować podobny login na instagram, aby użytkownik mógł uzyskać dostęp do swoich zdjęć. Uruchomiłem ten przykład bez problemu (https://github.com/crino/instagram-ios-sdk). Kiedy próbowałem zaimportować to do mojego projektu utknąłem. Ponieważ w projekcie Instagram jest też funkcja w AppDelegate (IGAppDelegate)

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

    return [self.instagram handleOpenURL:url]; 
} 

Teraz nie mogę korzystać z tej funkcji (ponieważ jest duplikatem Facebooku jeden) Czy istnieje sposób, aby połączyć te dwie funkcje na facebooku i instagram (może z "if" dla różnych adresów URL). Albo jestem zagubiony

PS: Zauważyłem, że gdy zgłoszę moją aplikację Facebook login url jest coś jak

fb4333597123414933: // autoryzować/# access_token = BAAGKI2vHLxUBANbDegkrdoc4GJWUZC2clqLAzxz8IxEBZBdEyjrD2oTaGZA0g2AbSGWgvEhONKM6xJWzLCALGUBguqUpor6kXu9ZBewusNZCUe6BOXYvX & expires_in = 5166254

w instagram to:

igfd725621c5e44198a5b8ad3f7a0ffa09: // autoryzuj # access_tok pl = 354172840.fd72562.bf6b3611632d4d00b6cef660ea9d9b6f

Odpowiedz

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

Co można umieścić w opisie wejść obrazu – AlxVallejo

+0

Nie ma potrzeby. Schematy adresów URL są ważne. – abhi

4

Swift: -

Przykład użycia zarówno Google+, jak i Facebooka w szybkiej aplikacji, oba wymagają metody OpenURL w 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

Dla 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 
    } 
Powiązane problemy