2013-04-25 18 views
5

Tôi thậm chí không chắc chắn làm thế nào để xác định vấn đề nhưng ở đây nó đi.Xử lý các Lược đồ URL khác nhau trong iOS (Facebook và Instagram)

Tôi có một ứng dụng sử dụng Facebook SDK để đăng nhập người dùng. Tôi đã làm theo hướng dẫn ủy quyền Facebook. Tôi không chắc chắn 100% cách thức hoạt động nhưng phần này trong "AppDelegate.m" của tôi có vẻ quan trọng.

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

    return [FBSession.activeSession handleOpenURL:url]; 
} 

Cho đến nay rất tốt. Bây giờ tôi muốn thực hiện một đăng nhập tương tự cho instagram để người dùng có thể truy cập các bức ảnh của họ. Tôi chạy ví dụ này mà không gặp sự cố (https://github.com/crino/instagram-ios-sdk). Khi tôi cố gắng để nhập này vào dự án của tôi, tôi đã bị mắc kẹt. Bởi vì trong dự án instagram đó cũng là một chức năng trong appdelegate (IGAppDelegate)

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

    return [self.instagram handleOpenURL:url]; 
} 

Bây giờ tôi không thể sử dụng chức năng này (vì nó là bản sao của Facebook một) Có cách nào để kết hợp hai chức năng này cho facebook và instagram (có thể với "if" cho các URL khác nhau). Hay tôi mất

PS: Tôi nhận thấy rằng khi tôi gọi ứng dụng facebook đăng nhập của tôi url là một cái gì đó giống như

fb4333597123414933: // ủy quyền/# access_token = BAAGKI2vHLxUBANbDegkrdoc4GJWUZC2clqLAzxz8IxEBZBdEyjrD2oTaGZA0g2AbSGWgvEhONKM6xJWzLCALGUBguqUpor6kXu9ZBewusNZCUe6BOXYvX & expires_in = 5166254

trong instagram nó giống như:

igfd725621c5e44198a5b8ad3f7a0ffa09: // ủy quyền # access_tok en = 354172840.fd72562.bf6b3611632d4d00b6cef660ea9d9b6f

Trả lời

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

Bạn làm gì để trong mô tả nhập hình ảnh – AlxVallejo

+0

Không cần. Lược đồ URL rất quan trọng. – abhi

4

Swift: -

Ví dụ để sử dụng cả Google+ và Facebook trong ứng dụng nhanh, cả hai đều yêu cầu phương thức OpenURL trong 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

Đối 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 
    }