我正在为一家餐馆制作一款iPad应用程序,客户可以登录Facebook并在墙上张贴以获得奖励。我需要该应用程序强制用户每次都输入他们的凭证。我能够登录使用嵌入式webview,但请求权限我无法弄清楚如何通过嵌入式进行操作。
当我尝试使用safari重定向时,safari将保存cookie,当第二个用户使用该应用程序时,仍会记录第一个用户。对于我们的用例,这种行为是不可取的。
如何在嵌入式网页浏览中保留此行为?
这是我现在的代码:
// Initialize a session object
FBSession *session = [[FBSession alloc] init];
// Set the active session
[FBSession setActiveSession:session];
// Open the session]
[session openWithBehavior:FBSessionLoginBehaviorForcingWebView
completionHandler:^(FBSession *session,
FBSessionState status,
NSError *error) {
[session requestNewPublishPermissions:[NSArray arrayWithObject:@"publish_actions"] defaultAudience:FBSessionDefaultAudienceEveryone completionHandler:^(FBSession *session, NSError *error) {
[self publishStream];
}];
}];
-(void)publishStream
{
NSLog(@"publishing stream here");
[self publishStory];
[[FBSession activeSession] closeAndClearTokenInformation];
[[FBSession activeSession] close];
[FBSession setActiveSession:nil];
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies]) {
[storage deleteCookie:cookie];
}
[[NSUserDefaults standardUserDefaults] synchronize];
}
- (void)publishStory
{
NSString *message = [NSString stringWithFormat:@"Having a great time at %@ and I just won a free %@", _restaurant_name, a_or_b? @"drink" : @"dessert"];
[FBRequestConnection
startWithGraphPath:@"me/feed"
parameters:[NSDictionary dictionaryWithObject:message forKey:@"message"]
HTTPMethod:@"POST"
completionHandler:^(FBRequestConnection *connection,
id result,
NSError *error) {
NSString *alertText;
if (error) {
alertText = [NSString stringWithFormat:
@"error: domain = %@, code = %d",
error.domain, error.code];
} else {
alertText = @"You have checked in on Facebook, let the staff know to redeam your free treat!";
}
// Show the result in an alert
[[[UIAlertView alloc] initWithTitle:nil
message:alertText
delegate:self
cancelButtonTitle:@"OK!"
otherButtonTitles:nil]
show];
}];
}
答案 0 :(得分:0)
这是一个错误,但已在最新版本的SDK(v3.10)中修复。
现在,Session将记住您用于打开会话的行为,并将其用于将来的权限请求。请更新您正在使用的SDK。
答案 1 :(得分:0)
我面临同样的问题,当请求发布权限时,再次显示带签名的授权对话框(当使用FBSessionLoginBehaviorForcingWebView行为进行登录时)。我已经在FBSession.m中修复了它,只是在执行重新授权时不删除cookie
if (!isReauthorize)
{
[FBUtility deleteFacebookCookies];
}