Facebook iOS SDK强制嵌入式Webview请求发布流权限

时间:2013-11-26 06:07:05

标签: ios facebook facebook-ios-sdk

我正在为一家餐馆制作一款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];
 }];
}

2 个答案:

答案 0 :(得分:0)

这是一个错误,但已在最新版本的SDK(v3.10)中修复。

现在,Session将记住您用于打开会话的行为,并将其用于将来的权限请求。请更新您正在使用的SDK。

答案 1 :(得分:0)

我面临同样的问题,当请求发布权限时,再次显示带签名的授权对话框(当使用FBSessionLoginBehaviorForcingWebView行为进行登录时)。我已经在FBSession.m中修复了它,只是在执行重新授权时不删除cookie

if (!isReauthorize)
{
    [FBUtility deleteFacebookCookies];
}