gpt4 book ai didi

ios - Facebook iOS SDK 3.2,用户从 facebook.com 删除应用程序时出现问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:42 26 4
gpt4 key购买 nike

我正在使用 Facebook iOS SDK(3.2 版),一切正常,直到用户进入 Facebook 并将该应用程序从授权应用程序列表中删除。那时,我仍然使用缓存的 session 登录,即使它实际上不再有效。强制清除访问 token 并再次登录也会导致使用相同的旧访问 token 。

现在在 application:didFinishLaunchingWithOptions: 我有这段代码来测试 session :

// Relogin with cached session
if (FBSession.activeSession.state == FBSessionStateCreatedTokenLoaded) {
NSLog(@"We're logged in to Facebook!");

[FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:NO completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
NSLog(@"accessToken: %@", session.accessTokenData.accessToken);
NSLog(@"status: %i", status);
NSLog(@"error: %@", error);

switch (status) {
case FBSessionStateOpen:
NSLog(@"FBSessionStateOpen");
NSLog(@"permissions: %@", session.permissions);
break;

case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
[session closeAndClearTokenInformation];
[Utilities presentMessage:@"Facebook login failed" withTitle:@"Error" level:MessageLevelError];
break;

default:
break;
}
}];
}

每次我启动应用程序时,它都说我仍然使用 user_birthday 和电子邮件权限登录。但是,当我尝试打开 https://graph.facebook.com/me?access_token=xxx使用我获得的 accessToken,它返回“验证访问 token 时出错:用户 123 尚未授权应用程序 123。”

使用 [FBSession.activeSession closeAndClearTokenInformation]; 清除 token 并强制重新登录无济于事,我总是得到完全相同的旧 accessToken。

有一个类似的问题 ( Facebook SDK 3.1 iOS: Handle login if user remove app from Facebook Settings ),但它指出“然后,用户关闭 iOS 应用程序并重新启动它......通过这次重新启动,iOS 应用程序“已修复”并检测到用户是不再登录。”我根本没有这种行为。

这就是我首先打开 session 的方式:

- (void)openFBSession {
NSArray *perm = @[ @"user_birthday", @"email" ];

[FBSession openActiveSessionWithReadPermissions:perm allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
DLog(@"accessToken: %@", session.accessTokenData.accessToken);
DLog(@"status: %i", status);
DLog(@"error: %@", error);

switch (status) {
case FBSessionStateOpen:
DLog(@"FBSessionStateOpen");
// this is where I need to use session.accessTokenData.accessToken, which is stale
break;

case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
[FBSession.activeSession closeAndClearTokenInformation];
[Utilities presentMessage:@"Facebook login failed" withTitle:@"Error" level:MessageLevelError];
break;

default:
break;
}
}];
}

最佳答案

如果Facebook SDK在自己做Facebook graph api请求时没有发现token无效,你需要强制iOS检查它的token。

当您调用自己的服务器 api(并为其提供 token )并代表那里的用户进行调用时,这很有用。如果您发现该 token 在那里无效,则告诉 iOS 6 该 token 无效的唯一方法是执行以下操作:

// Only do this if there is native Facebook Account support (iOS 6+)
BOOL isFacebookAccountsAvailable = (&ACAccountTypeIdentifierFacebook != NULL);
if (isFacebookAccountsAvailable) {
ACAccountStore *accountStore = [ACAccountStore new];
ACAccountType *accountTypeFB = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
NSArray *fbAccounts = [accountStore accountsWithAccountType:accountTypeFB];

for (ACAccount *fbAccount in fbAccounts)
[accountStore renewCredentialsForAccount:fbAccount completion:^(ACAccountCredentialRenewResult renewResult, NSError *error) {
DLog(@"Renew account error: %@", error.localizedDescription)
}];
}

关于ios - Facebook iOS SDK 3.2,用户从 facebook.com 删除应用程序时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15198501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com