2016-05-17 11 views
1
  • Я хочу открыть приложение facebook во время входа в систему, которое уже установлено в устройстве для аутентификации входа, но всегда открывается в браузере Safari.

- facebook кнопку мышиiOS: Войти в Facebook и открыть приложение для родных Facebook

-(void)loginButtonClicked 
     { 
      FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 

     // [login setLoginBehavior:FBSDKLoginBehaviorNative]; 

       [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"]; 
         } 
        } 
       }]; 
      } 
     } 

-здесь для извлечения пользовательской информации

 -(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) 
         { 
          NSString *accessToken = [[FBSDKAccessToken currentAccessToken] tokenString]; 
          [ref authWithOAuthProvider:@"facebook" token:accessToken 
            withCompletionBlock:^(NSError *error, FAuthData *authData) 
           { 
             if (error) 
             { 
              NSLog(@"Login failed. %@", error); 
             } 
             else 
             { 
              NSLog(@"Logged in! %@", authData); 

              //Start you app Todo 
             } 
         else 
         { 
          NSLog(@"Facebook email is not verified"); 
         } 
        } 
        else 
        { 
         NSLog(@"Error %@",error); 
        } 
       }]; 

     } 
  • Я хочу, чтобы открыть приложение facebook для входа в систему с Facebook.
+0

http://stackoverflow.com/questions/32566734/native-facebook-app-does-not-open-with-facebook-login-in-ios-9 Проверить эту ссылку. –

+0

этот код уже используется, но не открыт в приложении fb, всегда идет браузер, я использую новый sdk 4x –

+0

Я не в этой группе –

ответ

2

Пожалуйста, используйте FBLoginView в Facebook кнопку для входа в аккаунт Он автоматически обнаруживает Facebook приложение & и может иметь возможность Войти с Facebook. FBLoginView класс доступен в Facebook SDK.

+0

Я использовал новый sdk, так что могу ли я это сделать? –

+0

Да в новом SDK вы получите этот класс – SM18

2

От V4.6.0 он не будет перенаправлен в приложение fb. Ниже

(v4.6.0 - 10 сентября, 2015) Кроме того, SDK диалоги, такие как Войти, Как, Share Диалоги автоматически определить лучший пользовательский интерфейс на основе на устройстве, в том числе SFSafariViewController вместо Safari. Следуйте инструкциям по подготовке к iOS 9.

enter image description here

1

Пожалуйста, установите info.plist параметры правильно, вы можете не предоставили URL-адреса, как это

<array> 
     <dict> 
      <key>CFBundleURLSchemes</key> 
      <array> 
       <string>fb776035152513539</string> 
      </array> 
     </dict> 
</array> 

и

<key>FacebookAppID</key> 
<string>776035152513539</string> 

Если вы не в состоянии достичь что вы хотите, тогда вы можете использовать эти классы.

Заголовочный файл -

// 
// LxFaceBookHandler.h 
// KickOffSlotMachine 
// 
// Created by Prakhar Goyal on 06/08/15. 
// Copyright (c) 2015 LOGICNEXT. All rights reserved. 
// 

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

typedef NS_ENUM(NSInteger,LOGINRESPONSE) 
{ 
    LOGINRESPONSE_ERROR, 
    LOGINRESPONSE_CANCEL, 
    LOGINRESPONSE_SUCCESS 
}; 

@protocol LxFaceBookHandlerDelegate <NSObject> 

-(void)DidLogInWithResponse:(LOGINRESPONSE)type; 

@end 

@interface LxFaceBookHandler : NSObject 

@property(weak,nonatomic)id<LxFaceBookHandlerDelegate>delegate; 
-(void)InitFaceBookLogin; 

//Called from app Delegate 

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation; 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions; 

@end 

и файл реализации является -

// 
// LxFaceBookHandler.m 
// KickOffSlotMachine 
// 
// Created by Prakhar Goyal on 06/08/15. 
// Copyright (c) 2015 LOGICNEXT. All rights reserved. 
// 

#import "LxFaceBookHandler.h" 

@implementation LxFaceBookHandler 
@synthesize delegate = __delegate; 

- (instancetype)init 
{ 
    self = [super init]; 
    if (self) 
    { 
     __delegate = nil; 
    } 
    return self; 
} 

-(void)InitFaceBookLogin; 
{ 
    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 
    [login logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) 
    { 
     if (error) 
     { 
      if (__delegate!=nil) 
      { 
       if ([__delegate respondsToSelector:@selector(DidLogInWithResponse:)]) 
       { 
        [__delegate DidLogInWithResponse:LOGINRESPONSE_ERROR]; 
       } 
      } 
     } 
     else if (result.isCancelled) 
     { 
      if (__delegate!=nil) 
      { 
       if ([__delegate respondsToSelector:@selector(DidLogInWithResponse:)]) 
       { 
        [__delegate DidLogInWithResponse:LOGINRESPONSE_CANCEL]; 
       } 
      } 
     } 
     else 
     { 
      if (__delegate!=nil) 
      { 
       if ([__delegate respondsToSelector:@selector(DidLogInWithResponse:)]) 
       { 
        [__delegate DidLogInWithResponse:LOGINRESPONSE_SUCCESS]; 
       } 
      } 

      //    if ([result.grantedPermissions containsObject:@"email"]) { 
      //     // Do work 
      //    } 
     } 
    }]; 

} 

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

} 

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    return [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]; 
} 

@end 

Добавить FBSDKCoreKit.Framework и FBSDKLoginKit.Framework в проекте и установить приложение Delefate, как это -

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    self.window.backgroundColor=[UIColor blackColor]; 

SplashViewController *rVC = [[SplashViewController alloc] initWithNibName:@"SplashViewController" bundle:nil]; 

    self.mNavController=[[UINavigationController alloc]initWithRootViewController:rVC]; 
    [self.mNavController setNavigationBarHidden:YES]; 

    self.window.rootViewController=self.mNavController; 
    [self.window makeKeyAndVisible]; 

    self.handler = [[LxFaceBookHandler alloc]init]; 



    [self.handler application:application didFinishLaunchingWithOptions:launchOptions]; 
    return YES; 
} 
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
{ 
    return [self.handler application:application openURL:url sourceApplication:sourceApplication annotation:annotation]; 
} 

теперь вы можете использовать эти классы, как при любом событии, на кнопке click-

- (IBAction)FacebookLoginPressed:(UIButton *)sender 
{ 
    App.handler.delegate = self; 
    [App.handler InitFaceBookLogin]; 
} 
Смежные вопросы