gpt4 book ai didi

iphone - Facebook iOS 似乎在单击“确定”后返回应用程序时丢失了 session 您已经授权了应用程序

转载 作者:可可西里 更新时间:2023-11-01 03:52:31 25 4
gpt4 key购买 nike

我已将我的应用程序从 Facebook SDK 2 升级到 3.1。

我在 RecordsScreen 上有一个 Post 按钮。如果用户未登录 Facebook,将显示登录页面,如果用户已登录,将加载另一个 nib 以提示用户输入消息以发布到他/她自己的墙上。

我已经登录了。之后,每次点击发布按钮时,都会出现关于该应用程序的页面已经授权并询问您是否点击确定继续。单击“确定”后,应用程序终止并从头开始重新启动。每次单击“发布”按钮时,都会再次出现同一页面。看起来它找不到有效的 session 或 token 丢失。

我已经在模拟器和设备上对此进行了测试。同样的事情发生。部署目标是iOS5.1。

我唯一没有输入的参数是 iPhone App Store ID。这会影响上述行为吗?

我已经尝试了很多次,但找不到解决方案。

感谢任何帮助。

谢谢!

工作人员


1 月 4 日编辑:

我发现每次调用openSessionWithAllowLoginUI。返回状态 FBSessionStateClosedLoginFailed。登录有问题。但是用户已经登录,因为已经授权页面出现。

原因是 applicationWillTerminate 在 openSessonWithAllowLoginUI 之后立即执行。谁能阐明这一点?


在 appDelegate.h 中,我导入了 FacebookSDK/FacebookSDK.h,在 appDelegate.m 中,实现了以下内容:

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [FBSession.activeSession handleOpenURL:url);
}

-(void)applicationDidBecomeActive:(UIApplication *)application {
[FBSession.activeSession handleDidBecomeActive];
}

-(void)applicationWillTerminate:(UIApplication *)application {
[FBSession.activeSession close];
}

mainViewController 是一个可以切换 nib 的多 View Controller 。

我已经实现了一个 FBHandler 类来处理 Facebook 登录/注销。 FBHandler.h 包含#import "Facebook.h"并且 FBHandler 是一个包含

-(void)sessionStateChanged:(FBSession *)session state:(FBSessionState)state error:(NSError *)error {
switch(state) {
case FBSessionStateOpen:
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
[FBSession.activeSession closeAndClearTokenInformation];
default:
break;
}

[[NSNotificationCenter defaultCenter]postNotificationName:FBSessionStateChangedNotification object:session];

// If there is an error, display the alert view. I have skipped this code.
}

-(BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
return [FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:allowLoginUI completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
[self sessionStateChanged:session state:state error:error];
}];
}

nib 之一 - RecordsScreen.xib 包含 Facebook 登录/注销按钮。在 RecordsScreen.m(用户可以看到他/她的分数和从 Facebook 登录或注销的地方),将以下内容添加到 viewDidLoad:

fbHandler = [[FBHandler alloc] init];
[fbHandler openSessionWithAllowLoginUI:NO];

// Also, we will listen to FBSessionStateChangedNotification in viewDidLoad. Code is skipped here.

// The implementation of sessionStateChanged in RecordsScreen:
-(void)sessionStateChanged:(NSNotification *)notification {
if (FBSession.activeSession.isOpen) {
if (self.facebook == nil) {
self.facebook = [[Facebook alloc]initWithAppId:FBSession.activeSession.appID andDelegate:nil];
self.facebook.accessToken = FBSession.activeSession.accessToken;
self.facebook.expirationDate = FBSession.activeSession.expirationDate;
}
} else {
self.facebook = nil;
}
}

在 RecordsScreen.m 中,如果用户点击登录按钮,

if (!FBSession.activeSession.isOpen) {
// Login to Facebook.
[fbHandler openSessionWithAllowLoginUI:YES];
} else {
// If user is login, post to wall.
[self postScoreToWall];
}

最佳答案

我发现了问题。在 plist 中,“应用程序不在后台运行”设置为"is"。设置为 NO 解决了这个问题。

关于iphone - Facebook iOS 似乎在单击“确定”后返回应用程序时丢失了 session 您已经授权了应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14109250/

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