4

使用 Facebook iOS SDK 3.1。

When choosing not to allow a 'Connect' to a Facebook app, I'm stuck with Facebook throwing "com.facebook.sdk error2." 即使在重新安装我的应用程序之后,我也会出现错误。

重现步骤:

  1. 选择与 Facebook 联系
  2. UIAlertView在弹出的对话框中选择“Not Now”

=> 我无法选择再次连接。

用户再次连接的唯一方法是从“设置”中删除她的 Facebook 帐户并重新添加。

这是Facebook SDK 中的错误还是我遗漏了什么?

我显然遵循了授权教程,并且在选择连接时一切正常(授权,发布内容)。

4

2 回答 2

10

好的,所以我知道这里发生了什么。当拒绝应用程序授权时,这将作为设置存储在您设备的 Facebook 帐户中(设置 > Facebook)。

通过转到设置并重新启用有问题的应用程序,您可以尝试再次连接。对用户来说不是很清楚,但是您可以捕获此错误并向用户显示某种信息。

这就是我实现它的方式(与Facebook 的默认错误处理相比):

- (void)sessionStateChanged:(FBSession *)session
                      state:(FBSessionState)state
                      error:(NSError *)error {
....

if (error) {
        NSString *errorTitle = NSLocalizedString(@"Error", @"Facebook connect");
        NSString *errorMessage = [error localizedDescription];
        if (error.code == FBErrorLoginFailedOrCancelled) {
            errorTitle = NSLocalizedString(@"Facebook Login Failed", @"Facebook Connect");
            errorMessage = NSLocalizedString(@"Make sure you've allowed My App to use Facebook in Settings > Facebook.", @"Facebook connect");
        }

        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:errorTitle
                                                            message:errorMessage
                                                           delegate:nil
                                                  cancelButtonTitle:NSLocalizedString(@"OK", @"Facebook Connect")
                                                  otherButtonTitles:nil];
        [alertView show];
    }

}

于 2012-09-27T13:10:36.103 回答
1

当我在设置中添加帐户时尝试使用 Facebook 框架登录 Facebook 时遇到了同样的问题,但我使用以下代码解决了这个问题:

据我所知“com.facebook.sdk error2”。当在 iphone 中添加了一个帐户时。

应用代理.h

@property(强,非原子) FBSession *mysession;

只需在 appdelegate.m 中添加方法

-(void)openSessionWithAllowLoginUI:(BOOL)allowLoginUI{

    if (!self.mysession.isOpen) {
        // create a fresh session object
        self.mysession = [[FBSession alloc] initWithPermissions:permissions];
    }

        [self.mysession openWithCompletionHandler:^(FBSession *session,
                                                    FBSessionState stat,
                                                    NSError *error){
            [self sessionStateChanged:session
                                state:stat
                                error:error];
         NSLog(@"Session Staet is = %u",stat);

            switch (stat){
                case FBSessionStateClosed:
                    break;
                case FBSessionStateOpen:{
                        NSString *strAccessToken1 = [mysession accessToken];
                        NSLog(@"AccessToken = %@",strAccessToken1);
                        NSString  *urlstring1 = [NSString stringWithFormat:@"https://graph.facebook.com/me?access_token=%@",strAccessToken1];

                        NSURL *url1 = [NSURL URLWithString:[urlstring1 stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
                        NSString  *jsonRes = [NSString stringWithContentsOfURL:url1 encoding:NSUTF8StringEncoding error:nil];
                        NSDictionary *facebookData = [jsonRes JSONValue];
                        NSLog(@"FBSessionStateOpen = %@",facebookData);

                        NSString *strFBID = [[NSString alloc]initWithString:[NSString stringWithFormat:@"%@",[facebookData objectForKey:@"id"]]];

                        NSString *strName = [[NSString alloc]initWithString:[facebookData objectForKey:@"name"]];

                        NSLog(@"FBSessionStateOpen = %@",strName);

                        NSString *ProfileImageURL = [NSString stringWithFormat:@"https://graph.facebook.com/%@/picture",strFBID];

                        NSLog(@"Profile image URL is = %@",ProfileImageURL);

                        NSString *strImageURl = [[NSString alloc]initWithString:ProfileImageURL];

                        strAccessToken = [[NSString alloc]initWithString:strAccessToken1];
                        strAppUserName = [[NSString alloc]initWithString:strName];
                        strFacebookUsername = [[NSString alloc]initWithString:strName];
                        strAppUserProfileImage = [[NSString alloc]initWithString:strImageURl];
                        strFacebookUserId = [[NSString alloc]initWithString:strFBID];

                    break;
                }
                default:
                    break;
            }
      }];
}

这在我的行动方法中

-(IBAction)Facebook_Btn_Clicked:(id)sender{
        [appDelegate openSessionWithAllowLoginUI:YES];

      }
于 2012-10-25T12:30:45.493 回答