我正在使用Facebook SDK 3.1.1在我的iOS应用程序中实现FB Connect.这在新的FB集成(在iOS上登录)或通过Web视图回退到正常授权(在两种情况下都没有安装本机Facebook应用程序)的简单情况下工作正常.我在iOS级别切换帐户时会出现此问题.注销并使用其他FB用户帐户登录.
要登录/授权我执行:
[FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:allowLoginUI
completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
[self sessionStateChanged:session state:state error:error];
}];
Run Code Online (Sandbox Code Playgroud)
如果然后每次获得FBSessionStateClosedLoginFailed,即使我执行了closeAndClearTokenInformation
达到该状态的时间:
- (void)sessionStateChanged:(FBSession *)session
state:(FBSessionState) state
error:(NSError *)error
{
NSLog(@"Session State Changed: %u", [[FBSession activeSession] state]);
switch (state) {
case FBSessionStateOpen:
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
NSLog(@"FBSessionStateClosedLoginFailed ERROR: %@", [error description]);
[[FBSession activeSession] closeAndClearTokenInformation];
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
但是,每次重试都会收到相同的状态.我的日志说明如下:
FBSDKLog: FBSession **INVALID** transition from FBSessionStateCreated to FBSessionStateClosed
FBSDKLog: FBSession transition from FBSessionStateCreated to FBSessionStateCreatedOpening
FBSDKLog: FBSession transition from …
Run Code Online (Sandbox Code Playgroud) 在此之前,我已经阅读了这个和这个问题,以解决下面的问题,然后再询问.
我的问题是,当accessToken过期时(或者因为过期日期过去,或者通过从我的Facebook的App Center中删除应用程序而手动操作),以下代码:
if ([[FBSession activeSession] isOpen]) {
//do something
}
else {
[FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
if(FB_ISSESSIONOPENWITHSTATE(status)) {
//do something
}
}
}];
}
Run Code Online (Sandbox Code Playgroud)
在FBSession.activeSession打开的情况下进入else块,但是当执行'do something'时,accessToken无效,因此请求获得错误:HTTP状态代码:400.当我尝试立即执行整个过程两次时,FBSession请求权限(UIAlertView for iOS6集成了facebook,Facebook App或Safari网站),其余的运行顺畅.
我担心的是为什么我必须做两次才能正常工作以及为什么Facebook SDK第一次无法检测到activeSession和accessToken无效.
谢谢大家!
是否可以使用内置的iOS 6 Facebook集成来获取用户的基本信息(电子邮件地址,生日等)?我见过的所有文档/示例都使用iOS 6集成来简单地打开一个SLComposeViewController
.
感谢您的时间.
Facebook页面的网站摘要已损坏,我收到以下消息:
"message":"Error validating access token: The session has been invalidated
because the user has changed the password.",
"type":"OAuthException","code":190,"error_subcode":460
Run Code Online (Sandbox Code Playgroud)
类似的问题已经被问到,但我注意到其中一些已经很老了,我想确保答案是最新的.
我可以在不重新申请新令牌的情况下解决错误吗?
我正在使用3.1 Facebook SDK与iOS 6 Facebook设置在设置和我的应用程序授权.
这完美地执行:
[FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES completionHandler:^(FBSession *fbSession, FBSessionState fbState, NSError *error) { ... }
Run Code Online (Sandbox Code Playgroud)
但是现在当我试图获取"我"信息时,我收到了一个错误:
com.facebook.sdk:ParsedJSONResponseKey = {
body = {
error = {
code = 190;
"error_subcode" = 463;
message = "Error validating access token: Session has expired at unix time 1348704000. The current unix time is 1348706984.";
type = OAuthException;
};
};
code = 400;
}
Run Code Online (Sandbox Code Playgroud)
如果我看[error code]
它等于5.我登录后不应该有一个有效的访问令牌吗?我需要拨打重新授权吗?
更新:重新授权没有帮助.奇怪的是,我的activeSession的accessToken总是回归相同.尽管调用了closeAndClearToken.
我正在尝试处理权限错误,基本上我从www.facebook.com应用程序设置中删除了该应用程序.在应用程序中我使用此方法登录:
[FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES
completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
Run Code Online (Sandbox Code Playgroud)
出于某种原因,令牌被缓存,应用程序没有意识到我从Web上删除了权限.因此,在openActiveSessionWithReadPermissions之后,会话总是打开,然后我发出请求,然后我得到下一个响应:(不是在错误对象中,而是在响应中):
验证访问令牌时出错:用户XXX未授权应用程序YYY.
所以我处理它,因为令牌无效我这样做:
[[FBSession activeSession] closeAndClearTokenInformation];
Run Code Online (Sandbox Code Playgroud)
并再次尝试登录,但同样的问题.
似乎如果用户从网络中删除权限,那么聚会永远结束了吗?还有什么回头路?
使用Facebook iOS SDK 3.1.
当选择不允许"连接"到Facebook应用程序时,我被困在Facebook投掷"com.facebook.sdk error2".即使在重新安装我的应用程序后,我也会遇到错误.
重现步骤:
UIAlertView
弹出的选项中选择"Not Now"=>我无法选择再次连接.
用户再次连接的唯一方法是从"设置"中删除她的Facebook帐户并再次添加.
这是Facebook SDK中的错误还是我错过了什么?
我显然已经按照授权教程进行了操作,并且在选择连接时一切正常(auth,发布内容).
在我的应用程序获得访问在iOS 6的设置中注册的Facebook帐户后,我从我的facebook的隐私设置中撤消了该应用程序.然后我尝试通过调用[FBSession openActiveSessionWithReadPermissions ...]重新连接我的应用程序,并且该方法使用旧的访问令牌创建facebook会话,该令牌已经是INVALID,而不再请求权限授予.
我认为这个问题与这个问题有关(Facebook SDK 3.1 - 验证访问令牌的错误),据说它在SDK 3.1.1中得到修复.
但是,我正在使用SDK 3.1.1并通过在发生无效访问令牌错误时手动调用accountStore renewCredentialsForAccount事件来解决此问题.
我正在阅读的内容(许多FB开发文章和SO问题)都在帮助,所以我想我会在这里发帖.我试图让这一切与iOS 6和Facebook SDK 3.1.1一起使用.
我有一个非常基本的设置:我的iOS应用程序通过Facebook验证,我将access_token传递给我的服务器,用户现在登录到我的应用程序.他们可以做的唯一与facebook有关的事情就是发布一些东西到他们的墙上.我正在使用旧的Dialog窗口,因此用户可以添加自己的注释.
在第一个小时左右的新安装中,一切都完美无缺.如果用户通过iOS设置应用程序登录,他们会看到一个快速的iOS确认框,我得到他们的令牌,发送到我的服务器,我们都很好.
如果我将我收到的令牌粘贴到Facebook的Access Token调试器中,它会显示它将在一小时后到期.
如果我等了那个小时然后回到应用程序,我尝试做的任何事都会给我这个错误:
{"error_code":190,"
error_msg":"Error validating access token:
Session has expired at unix time 1351497600.
The current unix time is 1351525180. }
Run Code Online (Sandbox Code Playgroud)
[FBSession.activeSession closeAndClearTokenInformation]
)也无法解决此问题.我唯一能做的就是在iOS模拟器首选项中"重置内容和设置",在Settings.app中重新输入我的FB凭据,然后重建我的应用程序.只有这样我才能获得另一个将在一小时后到期的令牌.散记:
[FBSession.activeSession handleDidBecomeActive]
和[self.facebook extendAccessTokenIfNeeded]
FBSession#renewSystemAuthorization
.我已经在那里放了一个NSLog,我从来没有看到这个方法被调用.更新#1:
我提到我已经读过SDK会处理无效/过期的令牌.似乎应该在FBRequestConnection#completionWithResults:orError:中发生.有关代码路径的说明,请参阅内联注释.
- (void)completeWithResults:(NSArray *)results
orError:(NSError *)error
{
int count = [self.requests count];
for (int i = 0; i < count; i++) {
FBRequestMetadata *metadata = [self.requests objectAtIndex:i];
id result = error …
Run Code Online (Sandbox Code Playgroud) 我添加了facebook sdk来访问用户帐户.但是当用户已经通过iOS 6 facebook登录facebook时,然后在我的应用程序的第一页上,它必须显示应用程序要求配置文件权限的警报.为此,我在app delegate中添加了以下代码
[FBSession openActiveSessionWithAllowLoginUI:true];
NSArray *permissions = [NSArray arrayWithObjects:
@"friends_about_me",nil];
[FBSession openActiveSessionWithReadPermissions:permissions allowLoginUI:true
completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
if (error) {
NSLog(@"Failure");
}
}];
return YES;
Run Code Online (Sandbox Code Playgroud)
}
- (BOOL)application:(UIApplication*)application openURL:(NSURL )url sourceApplication:(NSString)sourceApplication annotation:(id)annotation {return [FBSession.activeSession handleOpenURL:url]; }
我正在收到警报.
但是,当我点击确定按钮时,它会给我以下错误
FBSDKLog:系统授权失败:'Facebook服务器无法满足此访问请求:remote_app_id与存储的ID不匹配'.这可能是由于开发人员在face.facebook.com/apps上捆绑标识符与服务器上的应用配置不匹配造成的.
但在我的fb开发者帐户中,一切都很好.请帮我解决这个问题.
谢谢!