2016-05-17 4 views
1
  • ログイン時にデバイスにログイン認証用にインストールされているが、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"]; 
         } 
        } 
       }]; 
      } 
     } 

-hereが

 -(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アプリでは開いていないので、常にブラウザになります。新しいSD4xを使用しました。 –

+0

私はこのグループにいません –

答えて

2

それは自動的にuはログインfacebookでログインすることができるFacebookアプリ&を検出FacebookでサインインボタンとしてFBLoginViewを使用してください。 FBLoginViewクラスはFacebook SDKで利用できます。

+0

私は新しいsdkを使用しました。 –

+0

新しいSDKでこのクラスを取得できます – SM18

2

V4.6.0以降は、fbアプリにリダイレクトされません。このよう ログインと同様に、共有ダイアログとしてSDKダイアログが自動的にSFSafariViewControllerの代わりに、サファリなど、デバイス上の を基に、最適なUIを、決定し、さらに -

(2015年9月10日v4.6.0)以下を参照してください。 準備中のiOS 9ガイドに従ってください。

enter image description here

1

適切Info.plistのパラメータを設定し、あなたが達成することができない場合は、あなたがこの

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

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

のようなURLを提供していないことがありますあなたが望むものなら、これらのクラスを使うことができます。

ヘッダーファイル -

// 
// 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]; 
} 

これらのクラスは、ボタンをクリックしたときにイベントとして使用できます。

- (IBAction)FacebookLoginPressed:(UIButton *)sender 
{ 
    App.handler.delegate = self; 
    [App.handler InitFaceBookLogin]; 
} 
関連する問題