Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Native Facebook app does not open with Facebook login in iOS 9

I have updated iPhone 6 plus to iOS 9 beta and trying to perform Facebook login but each time its presenting UIWebView with Facebook login form.

I have Facebook sdk

FB_IOS_SDK_VERSION_STRING @"3.24.0" FB_IOS_SDK_TARGET_PLATFORM_VERSION @"v2.2" 

And I am using following methods to perform Facebook Login

    NSArray *permissions = @[@"email",@"user_birthday",@"public_profile"];        FBSessionStateHandler completionHandler = ^(FBSession *session, FBSessionState status, NSError *error) {          [self sessionStateChanged:session state:status error:error];      };       if ([FBSession activeSession].state == FBSessionStateCreatedTokenLoaded) {      // we have a cached token, so open the session          [[FBSession activeSession]openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent                                  fromViewController:nil                                   completionHandler:completionHandler];      } else {       [self clearAllUserInfo];     [[NSURLCache sharedURLCache] removeAllCachedResponses];       // create a new facebook session      FBSession *fbSession = [[FBSession alloc] initWithPermissions:permissions];      [FBSession setActiveSession:fbSession];      [fbSession openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent               fromViewController:nil                completionHandler:completionHandler];      } 

I have following setting under plist file

    <key>LSApplicationQueriesSchemes</key>     <array>         <string>fbapi</string>         <string>fbapi20130214</string>         <string>fbapi20130410</string>         <string>fbapi20130702</string>         <string>fbapi20131010</string>         <string>fbapi20131219</string>         <string>fbapi20140410</string>         <string>fbapi20140116</string>         <string>fbapi20150313</string>         <string>fbapi20150629</string>         <string>fb-messenger-api20140430</string>         <string>fbauth</string>         <string>fbauth2</string>    <array> 

Please let me know what I am missing here. First it is checking for iPhone device Setting-> Facebook credentials but never open Facebook app for login. Seems it does not recognize Facebook app installed on device.

like image 887
Bhumeshwer katre Avatar asked Sep 14 '15 13:09

Bhumeshwer katre


People also ask

Does iOS 9 support Facebook?

In order to run your app on iOS 9, you need to upgrade to the latest Facebook SDK for iOS and take the following actions.

Why Facebook app is not working on iOS?

Check Facebook Update. Many times, apps stop working because they need to be updated. So, you need to make sure that you have an up-to-date version of the Facebook app on your iPhone. Once the Facebook app is updated successfully, then again open the app and check if now the app is working or not.

What iOS do you need for Facebook?

Requires iOS 13.4 or later. Requires tvOS 13.0 or later.


2 Answers

This is by design. Facebook still have some issue with iOS9.

See the Facebook team answere : https://developers.facebook.com/bugs/786729821439894/?search_id Thanks

like image 20
user3492452 Avatar answered Sep 23 '22 14:09

user3492452


Below is complete process for new "Facebook login".


this is how I have revised my Facebook Login integration to get it work on latest update.

Xcode 7.x , iOS 9 , Facebook SDK 4.x

Step-1. Download latest Facebook SDK (it includes major changes).

Step-2. Add FBSDKCoreKit.framework and FBSDKLoginKit.framework to your project.

Step-3. Now go to Project > Build Phases > add SafariServices.framework

Step-4. There are three changes in info.plist we need to verify.

4.1 Make sure you have below in your info.plist file

<key>CFBundleURLTypes</key> <array>   <dict>   <key>CFBundleURLSchemes</key>   <array>     <string><your fb id here eg. fbxxxxxx></string>   </array>   </dict> </array>   <key>FacebookAppID</key>   <string><your FacebookAppID></string>   <key>FacebookDisplayName</key> <string><Your_App_Name_Here></string> 

4.2 Now add below for White-list Facebook Servers, this is must for iOS 9

<key>NSAppTransportSecurity</key> <dict>   <key>NSExceptionDomains</key>   <dict>     <key>facebook.com</key>     <dict>       <key>NSIncludesSubdomains</key>       <true/>       <key>NSExceptionRequiresForwardSecrecy</key>       <false/>     </dict>     <key>fbcdn.net</key>     <dict>       <key>NSIncludesSubdomains</key>       <true/>       <key>NSExceptionRequiresForwardSecrecy</key>       <false/>     </dict>     <key>akamaihd.net</key>     <dict>       <key>NSIncludesSubdomains</key>       <true/>       <key>NSExceptionRequiresForwardSecrecy</key>       <false/>     </dict>   </dict> </dict> 

4.3 Add URL schemes

<key>LSApplicationQueriesSchemes</key>   <array>       <string>fbapi</string>       <string>fb-messenger-api</string>       <string>fbauth2</string>       <string>fbshareextension</string>   </array> 

Step-5. Now open AppDelegate.m file

5.1 Add below import statements, (remove old one).

#import <FBSDKLoginKit/FBSDKLoginKit.h>  #import <FBSDKCoreKit/FBSDKCoreKit.h> 

5.2 update following following methods

- (BOOL)application:(UIApplication *)application             openURL:(NSURL *)url   sourceApplication:(NSString *)sourceApplication          annotation:(id)annotation {   return [[FBSDKApplicationDelegate sharedInstance] application:application                                                          openURL:url                                                sourceApplication:sourceApplication                                                       annotation:annotation]; }  - (void)applicationDidBecomeActive:(UIApplication *)application {   [FBSDKAppEvents activateApp]; }  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   return [[FBSDKApplicationDelegate sharedInstance] application:application                                     didFinishLaunchingWithOptions:launchOptions]; } 

Step-6. Now we need to modify our Login Controller, where we do Login task

6.1 Add these imports in Login ViewController.m

#import <FBSDKCoreKit/FBSDKCoreKit.h> #import <FBSDKLoginKit/FBSDKLoginKit.h> 

6.2 Add Facebook Login Button

FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init]; loginButton.center = self.view.center; [self.view addSubview:loginButton]; 

6.3 Handle Login button click

-(IBAction)facebookLogin:(id)sender {     FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];      if ([FBSDKAccessToken currentAccessToken])     {         NSLog(@"Token is available : %@",[[FBSDKAccessToken currentAccessToken]tokenString]);         [self fetchUserInfo];     }     else     {         [login logInWithReadPermissions:@[@"email"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)          {              if (error)              {                  NSLog(@"Login process error");              }              else if (result.isCancelled)              {                  NSLog(@"User cancelled login");              }              else              {                  NSLog(@"Login Success");                   if ([result.grantedPermissions containsObject:@"email"])                  {                      NSLog(@"result is:%@",result);                      [self fetchUserInfo];                  }                  else                  {                      [SVProgressHUD showErrorWithStatus:@"Facebook email permission error"];                   }              }          }];     } } 

6.4 Get user info (name, email etc.)

-(void)fetchUserInfo {     if ([FBSDKAccessToken currentAccessToken])     {         NSLog(@"Token is available : %@",[[FBSDKAccessToken currentAccessToken]tokenString]);          [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"id, name, email"}]          startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {              if (!error)              {                  NSLog(@"results:%@",result);                   NSString *email = [result objectForKey:@"email"];                  NSString *userId = [result objectForKey:@"id"];                   if (email.length >0 )                  {                      //Start you app Todo                  }                  else                  {                     NSLog(@“Facebook email is not verified");                  }              }              else              {                  NSLog(@"Error %@",error);             }          }];     } } 

Step-7. Now you can build project, you should get below screen.

enter image description here

Hope this will help you guys.

References : Thanks to Facebook docs, Stackoverflow posts and Google.

like image 60
swiftBoy Avatar answered Sep 24 '22 14:09

swiftBoy



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!