use*_*662 6 facebook login logout ios
我们在iOS facebook登录注销问题上遇到了麻烦.当我使用我的应用程序登录Facebook时,它将通过"登录"和"取消"按钮提示用户权限.但这个屏幕只在第一次出现.即一旦我们使用safari或应用程序登录,即使我们从Facebook注销,应用程序提示用户权限的屏幕也只显示"确定"按钮.它不允许以其他用户身份登录.为什么每次启动应用程序时都不显示带有"登录"和"取消"按钮的屏幕?我尝试删除cookie并删除NSUserDefaults,但没有运气.
问题是注销后,我无法以另一个用户身份登录facebook.它仍然显示为同一个用户.
我在sdk中调用以下注销功能
(void)logout:(id<FBSessionDelegate>)delegate {
self.sessionDelegate = delegate;
[_accessToken release];
_accessToken = nil;
[_expirationDate release];
_expirationDate = nil;
NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray* facebookCookies = [cookies cookiesForURL:
[NSURL URLWithString:@"http://login.facebook.com"]];
for (NSHTTPCookie* cookie in facebookCookies) {
[cookies deleteCookie:cookie];
}
if ([self.sessionDelegate respondsToSelector:@selector(fbDidLogout)]) {
[_sessionDelegate fbDidLogout];
}
}
Run Code Online (Sandbox Code Playgroud)
同样在fbDidLogout委托函数中,我删除了所有NSUserDefaults对象
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"]) {
[defaults removeObjectForKey:@"FBAccessTokenKey"];
[defaults removeObjectForKey:@"FBExpirationDateKey"];
[defaults synchronize];
}
Run Code Online (Sandbox Code Playgroud)
重新组织什哈布
您可以使用以下代码清除会话以及清除cookie:
FBSession* session = [FBSession activeSession];
[session closeAndClearTokenInformation];
[session close];
[FBSession setActiveSession:nil];
NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray* facebookCookies = [cookies cookiesForURL:[NSURL URLWithString:@"https://facebook.com/"]];
for (NSHTTPCookie* cookie in facebookCookies) {
[cookies deleteCookie:cookie];
}
Run Code Online (Sandbox Code Playgroud)
我修改了fbDidLogout方法并且它工作正常,这里是代码:
-(void) fbDidLogout
{
NSLog(@"Logged out of facebook");
NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies])
{
NSString* domainName = [cookie domain];
NSRange domainRange = [domainName rangeOfString:@"facebook"];
if(domainRange.length > 0)
{
[storage deleteCookie:cookie];
}
}
}//End of Method
Run Code Online (Sandbox Code Playgroud)
该方法成功注销用户.希望这会有所帮助!
可以使用FBSession openWithBehavior:completionHandler:。
FBSession *fbSession = [[FBSession alloc] initWithPermissions:[NSArray arrayWithObjects:@"email",@"publish_actions",@"publish_stream", nil]];
[fbSession openWithBehavior:FBSessionLoginBehaviorForcingWebView completionHandler:^(FBSession *session,FBSessionState state, NSError *error){
[FBSession setActiveSession:fbSession]; // Retain the Active Session.
}];
Run Code Online (Sandbox Code Playgroud)
对于注销,Ellen S ...的Ans在iOS上运行良好。
| 归档时间: |
|
| 查看次数: |
11887 次 |
| 最近记录: |