2017-04-20 22 views
0

私はIOSアプリケーション開発を初めて使いました。これはFacebook SDKをアプリケーションに統合した初めてのことです。 私は初期のView Controllerを使ってFacebook SDK経由でユーザーを認証し、認証後に別のView Controllerにリダイレクトします。さらに、ログアウトをクリックすると、ユーザーをこの最初のView Controllerにリダイレクトすることができます。Facebook SDKログイン後のObjective-Cトリガーイベント

私は私の見解にFacebookのログインボタンを追加する(viewDidLoad関数内)次のコードを使用しています:

FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init]; 

// setting the facebook button position 
float screenHeight = [[UIScreen mainScreen] bounds].size.height; 
float screenWidth = [[UIScreen mainScreen] bounds].size.width; 
CGPoint origin = CGPointMake(screenWidth/2, screenHeight - 100); 

// Optional: Place the button in the center of your view. 
loginButton.center = origin; 
[self.view addSubview:loginButton]; 

ボタンが正常に動作しているが、私は私がログインした直後ことに気づきました、 [FBSDKAccessToken currentAccessToken]はすべてのView Controllerライフサイクル機能でnilです。基本的には、私のページが読み込まれた後、この値はFacebook SDKによって初期化されているようです。

このアクセストークンが初期化された直後に関数を実行する方法はありますか?そうすれば、別のコントローラに正常にリダイレクトできますか?またはこの動作を達成するのに役立つ機能がありますか? 同様に、別のビューからログアウトボタンをクリックすると、ユーザーをこの初期ビューコントローラに戻すことができます。

+0

に実装されていることを確認する必要があります...あなたはこのためFacebookSDKのデリゲートメソッドを使用する必要があります。 – KKRocks

+0

いや、ありがとう、それは私がやったことだ。私はFacebookの開発者ページのGetting Startedガイドでこの情報を見つけることができなかったので、これをどのように行うべきかの簡単な説明を追加しました –

答えて

1

私はこれまでで、この問題の最も簡単な解決策は、ログインボタンのためのデリゲートとしてビューコントローラを設定すると、以下の機能を実装することになる、ことがわかった:

まず、あなたはこのプロトコルを使用する必要があります:

@interface LoginController()<FBSDKLoginButtonDelegate> 

その後、ボタンのデリゲートとしてビューコントローラを設定

loginButton.delegate = self; 

最後に、あなたはそれを手動で管理する必要があり、次の2つの方法が

- (void) loginButton:(FBSDKLoginButton *)loginButton 
didCompleteWithResult:(FBSDKLoginManagerLoginResult *)result 
       error:(NSError *)error{ 
    //use your custom code here 
    //redirect after successful login 
} 
- (void) loginButtonDidLogOut:(FBSDKLoginButton *)loginButton{ 
    //use your custom code here 
    //redirect after successful logout 
} 
0

FBGraphApiを使用すると、ユーザーが正常にログインするときにコールバックする必要があると思います。

以下のtryコード:

-(void)FBLoginWithViewController:(UIViewController *)viewController withCompletion:(FBDataBlock)block 
{ 
    [login logInWithReadPermissions: @[@"public_profile"] 
      fromViewController:viewController 
      handler:^(FBSDKLoginManagerLoginResult *permissionResult, NSError *error) { 
       if (error) { 

        block(permissionResult,error,nil); 

       } else if (permissionResult.isCancelled) { 

        block(permissionResult,error,nil); 

       } else { 

        [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{ @"fields" : @"id,name,picture,email,friends"}] 
         startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id response, NSError *error) { 

           block(permissionResult,error,response); 
         }]; 
       } 
      }]; 

} 

機能の上に呼び出すことによって、あなたはComplitionBlockにコールバックされます。

+0

助けてくれてありがとうございますが、私はグラフAPI私の場合は必須です。 –

0

ここには、ユーザーの情報を取得するための完全で完全なコードがあります。

FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 
[login 
logInWithReadPermissions: @[@"public_profile", @"user_friends", @"email"] 
fromViewController:self 
handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) { 
    if (error) { 
     DLog(@"Process error======%@",error.description); 
     indicators.hidden=YES; 
     [indicators stopAnimating]; 
    } else if (result.isCancelled) { 
     DLog(@"Cancelled"); 
     indicators.hidden=YES; 
     [indicators stopAnimating]; 
    } else { 

     if ([FBSDKAccessToken currentAccessToken]) { 



      [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"id, name, link, first_name, last_name, picture.type(large), email, birthday, bio ,location ,friends ,hometown , gender ,friendlists"}] 
       startWithCompletionHandler:^(
              FBSDKGraphRequestConnection *connection, id result, NSError *error) { 
        if (!error) 
        { 

         // NSLog(@"fetched user:%@", result); 

         // [self fetchingFacebookFriends]; 

         [defFacebookData setObject:[result objectForKey:@"email"] forKey:@"fbEmail"]; 

         [defFacebookData setObject:[result objectForKey:@"id"] forKey:@"fbID"]; 


         //PASS ID 
         getFbid = [result objectForKey:@"id"]; 
    NSLog(@"getFbid========>%@",getFbid); 

         //PASS FIRST NAME 
         getFbFirstName=[result objectForKey:@"first_name"]; 

    NSLog(@"first======>%@",getFbFirstName); 

         //PASS LAST NAME 
         getFBlastName=[result objectForKey:@"last_name"]; 
    NSLog(@"first======>%@",getFBlastName); 

         //PASS EMAIL 
         getFbemail=[result objectForKey:@"email"]; 
    NSLog(@"first======>%@",getFbemail); 

         //PASS PHONE 
         getfbGender=[result objectForKey:@"gender"]; 
    NSLog(@"first======>%@",getfbGender); 


         [defFacebookData setObject:[result objectForKey:@"name"] forKey:@"fbName"]; 

         // Image 
         FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] 
                initWithGraphPath:[NSString stringWithFormat:@"me/picture?type=large&redirect=false"] 
                parameters:nil 
                HTTPMethod:@"GET"]; 
         [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, 
                  id fbImageResult, 
                  NSError *error) { 

NSString *strURL = [NSString stringWithFormat:@"%@",[[fbImageResult objectForKey:@"data"] objectForKey:@"url"]]; 

    NSLog(@"strURL=====>%@",strURL); 

[defFacebookData setObject:strURL forKey:@"fbImage"]; 

          [defFacebookData synchronize]; 


          NSDictionary *fbdict=[NSDictionary dictionaryWithObjectsAndKeys:getFbid,@"id",getFbFirstName,@"first_name",getFBlastName,@"last_name",getFbemail,@"email",getfbGender,@"gender",strURL,@"fbImage", nil]; 

          NSLog(@"done=========>%@",fbdict); 

    UIStoryboard*storyboard=[AppDelegate storyBoardType]; 

    NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; 


    BOOL fblogin =[defaults boolForKey:@"KeyEditProfile"]; 

     if (fblogin) 
      { 

       UIStoryboard*Storyboard=[AppDelegate storyBoardType]; 
       DashboardVC* tabbarController = (DashboardVC*)[Storyboard instantiateViewControllerWithIdentifier:@"DashboardVCId"]; 



       indicators.hidden=YES; 
       [indicators stopAnimating]; 

       [self.navigationController pushViewController:tabbarController animated:YES]; 

     } 

    else 
    { 
    EditFBVC *cpvc=(EditFBVC*)[storyboard instantiateViewControllerWithIdentifier:@"EditFBVCId"]; 
    NSLog(@"get fb id ===%@",getFbid); 


    cpvc.dictFacebookdict =fbdict; 

    cpvc.strFBlogin [email protected]"fbAllDataValue"; 

     indicators.hidden=YES; 
     [indicators stopAnimating]; 

    [self.navigationController pushViewController:cpvc animated:YES]; 

    } 
         }]; 
        } 
        else{ 

         DLog(@"error is %@", error.description); 
        } 
       }]; 
     } 
    } 
}]; 
関連する問題