2

ログインしているFacebookユーザーから、少なくともID、ユーザー名、および電子メールを取得しようとしています。まず、アクセス許可の種類を使用してログインします: 電子メール。成功した場合は、FBSDKGraphRequest の取得を試みます。FBSDKGraphRequest は、電子メール以外のすべての可能な値を返します。

public_profile などのアクセス許可も追加してみましたが、いずれにしてもメールが届きません。開発者ダッシュボードを調べたところ、メールはデフォルトで承認されているようです。

FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
[loginManager logInWithReadPermissions:@[@"email"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
    if (error) {
        NSLog(@"Error: %@", error);
        return;
    } else if (result.isCancelled) {
        return;
    }

    FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"id, name, gender, first_name, last_name, locale, email"}];

    [request startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
        if (error) {
            NSLog(@"Error: %@", error);
            return;
        }

        NSLog(@"Fetched user: %@", result);
    }];
}];
4

4 に答える 4

2

あなたのコードは次のようになります

-(void)loginWithFacebookButtonTouchUpInside
{
    if(![FBSDKAccessToken currentAccessToken])
    {
        FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
        [login logInWithReadPermissions:@[@"email",@"public_profile"] fromViewController:nil handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
            if (error) {
                // Process error
            }
            else if (result.isCancelled)
            {
                // Handle cancellations
            }
            else
            {
                // If you ask for multiple permissions at once, you
                // should check if specific permissions missing
                [self userLoggedIn];
            }

        }];
    }else{
       //error "Authentication is not done"
    }
}

- (void)userLoggedIn
{
    [FBSDKProfile enableUpdatesOnAccessTokenChange:NO];
    [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"name, email,first_name,last_name"}]
     startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id userInfo, NSError *error) {
         if (!error) {
             {

             }
         }
     }];
}
于 2016-02-11T09:36:06.657 に答える
0

私はちょうど同じ問題を抱えていたので、幸運にもコメントで解決策を見つけることができました。それはCBroeによって与えられます。これは回答として投稿する必要があると思います。

だから...私の場合、問題はユーザーが自分のメールを確認していないことでした。確認したら、Facebookからメールが届きました。すべての承認は CBroe に対するものです

于 2016-03-27T12:33:09.937 に答える
0

ログインボタンのクリックで次のコードを使用します。

FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
[loginManager setLoginBehavior:FBSDKLoginBehaviorSystemAccount];
[loginManager logInWithReadPermissions:@[@"public_profile", @"email", @"user_friends"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
{
    if (error)
    {
        [MBProgressHUD hideHUDForView:self.view animated:YES];
        [loginManager logOut];
    }
    else if (result.isCancelled)
    {
        [MBProgressHUD hideHUDForView:self.view animated:YES];
        [loginManager logOut];
    }
    else
    {
        if ([result.grantedPermissions containsObject:@"publish_actions"])
        {
            NSTimeInterval addTimeInterval = 60*60*24*365*50;
            NSDate *expireDate = [[NSDate date] dateByAddingTimeInterval:addTimeInterval];
            NSDate *refreshDate = [[NSDate date] dateByAddingTimeInterval:addTimeInterval];

            FBSDKAccessToken *newAccessToken = [[FBSDKAccessToken alloc] initWithTokenString:[[FBSDKAccessToken currentAccessToken] tokenString] permissions:nil declinedPermissions:nil appID:FACEBOOK_ID userID:[[FBSDKAccessToken currentAccessToken] userID] expirationDate:expireDate refreshDate:refreshDate];
            [FBSDKAccessToken setCurrentAccessToken:newAccessToken];
            [self FacebookUserInfo];
        }
        else
        {
            [loginManager logInWithPublishPermissions:@[@"publish_actions"] fromViewController:self handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
            {
                if (error)
                {
                    [MBProgressHUD hideHUDForView:self.view animated:YES];
                    [loginManager logOut];
                }
                else if (result.isCancelled)
                {
                    [MBProgressHUD hideHUDForView:self.view animated:YES];
                    [loginManager logOut];
                }
                else
                {
                    NSTimeInterval addTimeInterval = 60*60*24*365*50;
                    NSDate *expireDate = [[NSDate date] dateByAddingTimeInterval:addTimeInterval];
                    NSDate *refreshDate = [[NSDate date] dateByAddingTimeInterval:addTimeInterval];

                    FBSDKAccessToken *newAccessToken = [[FBSDKAccessToken alloc] initWithTokenString:[[FBSDKAccessToken currentAccessToken] tokenString] permissions:nil declinedPermissions:nil appID:FACEBOOK_ID userID:[[FBSDKAccessToken currentAccessToken] userID] expirationDate:expireDate refreshDate:refreshDate];
                    [FBSDKAccessToken setCurrentAccessToken:newAccessToken];
                    [self FacebookUserInfo];
                }
            }];
        }
    }
}];

Access Token を取得したら、次のメソッドを呼び出します。

- (void)FacebookUserInfo
{
    [[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields":@"name,email,first_name,last_name"}]
     startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error)
     {
         if (!error)
         {
             NSDictionary *dict = @{@"id":result[@"id"],
                                          @"name":result[@"first_name"],
                                          @"email":result[@"email"]
                                          };
             [self saveData:dict];
         }
         else
         {

         }
     }];
}

これはあなたにとって役立つかもしれません。

于 2016-02-11T08:20:28.183 に答える