接受应用程序时选择“不立即”会导致“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”的主要内容,如果未能解决你的问题,请参考以下文章