2016-09-18 11 views
10

मेरे ऐप में फेसबुक के साथ लॉगिन करने का विकल्प है।उद्देश्य सी - आईओएस 10 फेसबुक लॉगिन रिक्त स्क्रीन

आईओएस 9.3 पर यह ठीक काम करता है।

जब मैं आईओएस 10.0.1 पर इसका परीक्षण करता हूं, तो यह मुझे एक खाली स्क्रीन दिखाता है। enter image description here

मैं प्रवेश प्रक्रिया शुरू करने के लिए इस कोड का उपयोग कर रहा हूँ:

- (void)FacbookLoginButtonPressed:(id)sender { 

    [self showLoader]; 

    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 
    [login 
    logInWithReadPermissions: @[@"public_profile", @"email"] 
    fromViewController:self 
    handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
     if (error) { 
      NSLog(@"Process error"); 
      [self hideLoader]; 
      [self showError:@"Error" message:@"Please try to use other login option"]; 
     } else if (result.isCancelled) { 
      NSLog(@"Cancelled"); 
      [self hideLoader]; 
      [self showError:@"Error" message:@"Please try to use other login option"]; 
     } else { 
      [self loginButton:sender didCompleteWithResult:result error:error]; 
      NSLog(@"Logged in"); 
     } 
    }]; 
} 

self मेरी ViewController कॉल loginViewController कि बटन से पता चलता है, इसके लिए इस लाइब्रेरी का उपयोग कर UIViewController

मेरा ऐप से विरासत स्लाइड नेविगेशन: https://github.com/aryaxt/iOS-Slide-Menu

loginViewController स्क्रीन दिखाने के लिए दो विकल्प हैं:

1. नियमित स्क्रीन (UIViewController से विरासत) से, वहाँ एक बटन है, तो उस क्लिक पर इस कोड चलाएँ:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"loginScreen"; 
[self presentViewController:vc animated:YES completion:nil]; 

कि काम के ठीक है, मैं Facebook के साथ सफलतापूर्वक प्रवेश करने में सक्षम हूँ।

2. अन्य स्क्रीन से कि भी UIViewController से विरासत है, लेकिन इस स्क्रीन स्लाइड मेनू है, और मैं AppDelegate

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
MenuViewController *menu = [sb instantiateViewControllerWithIdentifier:@"MenuViewController"; 
[SlideNavigationController sharedInstance].rightMenu = menu; 

में इस कोड को इस विकल्प का उपयोग करना है, फेसबुक लॉगइन काम नहीं करता है (खाली स्क्रीन)

कार्रवाई है कि मैं आदेश यह काम करता है बनाने की कोशिश करने में किया था:

  1. नवीनतम फेसबुक एसडीके को अपडेट - usin जी इस: https://developers.facebook.com/docs/ios/getting-started
  2. कीचेन साझाकरण सक्षम - का उपयोग करते हुए इस:

    Presenting view controllers on detached view controllers is discouraged <loginViewController: 0x7622fb0>. 
    
    : https://stackoverflow.com/a/38799196/867694

केवल एक चीज मैं लॉग में है कि जब loginViewController मेनू (2 विकल्प) से प्रकट होता है यह है

मैं क्या कर सकता हूं?

+0

समस्या SafariViewController प्रस्तुत करने के तरीके में है। आईओएस 10 में ऐप्पल ने छुपा सफारीवी के उपयोग को प्रतिबंधित करने के लिए कुछ कोड जोड़ा (मैंने इसके बारे में लिखा [यहां] (http://stackoverflow.com/questions/39019352/ios10-sfsafariviewcontroller-not-working-when-alpha-is-set- टू -0)) और ऐसा लगता है कि यह आपके व्यवहार को ब्रोक करता है। इसी प्रश्न के लिए यह [उत्तर] (http://stackoverflow.com/a/39386491/1044073) देखें, यह आपको समाधान का सुझाव दे सकता है। –

उत्तर

8

मैं अंत में यह तय हो गई, MenuViewController में मैं जिस तरह से यह करने के लिए loginViewController पेश करने के लिए बदल दिया है:

[self.view.window.rootViewController presentViewController:vc animated:YES completion:nil]; 
0
[self presentViewController:vc animated:YES completion:nil] 

[self.view.window.rootViewController presentViewController:vc animated:YES completion:nil] 

के साथ बदलें और

9

कोशिश आईओएस 10 में आपको openURL के लिए एक और कार्यान्वयन की आवश्यकता है:

#ifdef __IPHONE_9_0 
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary *)options { 

    [[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey] annotation:options[UIApplicationOpenURLOptionsAnnotationKey]]; 

    return YES; 
} 
#else 
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
    [[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation]; 

    return YES; 
} 
#endif 
+0

धन्यवाद, यह आईओएस 10 का जवाब है! –

+1

आधिकारिक ऐप्पल दस्तावेज़ों के अनुसार बाद की विधि आईओएस 9.0 पर बहिष्कृत है। _later_ OS के लिए यह उत्तर कैसे हो सकता है? – BaseZen

0

कृपया सुनिश्चित करें कि, आप निम्न कोड लिखें:

[window makeKeyAndVisible]; 

में
didFinishLaunchingWithOptions 
0
func loginAction() { 

    let manager = LoginManager.init(loginBehavior: LoginBehavior.web, defaultAudience: LoginDefaultAudience.friends) 
    manager.logIn([.publicProfile, .email, .userFriends], viewController: self.navigationController, completion: { (loginResult) in 

     print("LOGIN RESULT! \(loginResult)") 
     switch loginResult { 
     case .failed(let error): 
      print("FACEBOOK LOGIN FAILED: \(error)") 
     case .cancelled: 
      print("User cancelled login.") 
     case .success(let grantedPermissions, let declinedPermissions, let accessToken): 
      print("Logged in!") 
      print("GRANTED PERMISSIONS: \(grantedPermissions)") 
      print("DECLINED PERMISSIONS: \(declinedPermissions)") 
      print("ACCESS TOKEN \(accessToken)") 
     } 
    }) 
} 

मैं self से self.navigationController को ViewController बदल गया है और यह काम करता है।

संबंधित मुद्दे