2013-04-25 19 views
5

Non sono nemmeno sicuro di come definire il problema, ma qui va.Gestione di diversi schemi URL in iOS (Facebook e Instagram)

Ho un'applicazione che utilizza Facebook SDK per l'accesso utente. Ho seguito il tutorial di autorizzazione di Facebook. Non sono sicuro al 100% come funziona, ma questa parte del mio "AppDelegate.m" sembra importante.

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

    return [FBSession.activeSession handleOpenURL:url]; 
} 

Fin qui tutto bene. Ora voglio implementare un login simile per instagram in modo che l'utente possa accedere alle loro foto. Eseguo questo esempio senza problemi (https://github.com/crino/instagram-ios-sdk). Quando ho provato a importarlo nel mio progetto sono rimasto bloccato. Perché in progetto di Instagram c'è anche una funzione nella AppDelegate (IGAppDelegate)

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

    return [self.instagram handleOpenURL:url]; 
} 

Ora non posso usare questa funzione (dal momento che è un duplicato di Facebook uno) C'è un modo per combinare queste due funzioni per facebook e instagram (magari con un "se" per URL diversi). O sono perso

PS: Ho notato che quando chiamo la mia app facebook login l'url è qualcosa di simile

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

in instagram è come:

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

risposta

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

Cosa si fa a mettere nella descrizione entrare immagine – AlxVallejo

+0

Non c'è bisogno. Gli schemi URL sono importanti. – abhi

4

Swift: -

Esempio per utilizzare sia Google+ che Facebook in app rapida, entrambi richiedono il metodo OpenURL nell'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

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