接受应用程序时选择“不立即”会导致“com.facebook.sdk error2”

Posted

技术标签:

【中文标题】接受应用程序时选择“不立即”会导致“com.facebook.sdk error2”【英文标题】:Choosing 'Not Now' when accepting app causes "com.facebook.sdk error2" 【发布时间】:2012-09-27 11:52:17 【问题描述】:

使用 Facebook ios SDK 3.1。

在选择时不允许“连接”到Facebook应用程序时,我陷入了Facebook抛出的“com.facebook.sdk错误2”。即使在重新安装我的应用程序之后也会出现错误。

重现步骤:

    选择与 Facebook 建立联系 在弹出的UIAlertView 中选择“Not Now”

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

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

这是bug in the Facebook SDK 还是我错过了什么?

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

【问题讨论】:

【参考方案1】:

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

通过转到“设置”并重新启用相关应用,您可以尝试再次连接。用户不是很清楚,但您可以捕获此错误并向用户显示某种信息。

这就是我实现它的方式(与Facebook's default error handling相比):

- (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];
    

【讨论】:

您是否还检查了如果您通过 facebook.com 上的 Facebook 隐私设置取消授权您的 Facebook 应用程序会发生什么?您遇到的是相同的错误还是不同的错误?它对设备上的 Facebook 设置有何影响? 不,但是单独看错误代码我猜它会是同样的错误。 +1。很好的解决方案。 Facebook 的默认错误消息应该像您的那样更具描述性。 Jason Clark(似乎是一位 facebook 工程师)最近对该问题的回答提供了一种解决问题的方法,而无需将用户重定向到设备设置。这是线程:***.com/questions/12601191/… 可能是一个n00b问题,但是你在这个错误处理中添加了什么?【参考方案2】:

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

据我所知“com.facebook.sdk error2”。 iphone中添加账号时来的。

appdelegate.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];

      

【讨论】:

以上是关于接受应用程序时选择“不立即”会导致“com.facebook.sdk error2”的主要内容,如果未能解决你的问题,请参考以下文章

app 立即杀进程导致 webview保存的cookie失效

在选择查询中两次调用用户定义的函数会导致效率低下吗?

如何设置jvm启动参数

为啥选择/读取会导致排他(X)锁?

选择图片会导致重新保存到相机胶卷

仅将视频加载到 VideoView 中而不立即播放