簡體   English   中英

在iOS中使用Facebook SDK退出功能

[英]Logout Functionality using Facebook SDK in ios

我已經使用Facebook SDK注銷了Facebook。但是,再次轉到同一帳戶,它在表視圖中顯示兩次值(對於Ex:Prem Kumar。此名稱在單元格中顯示兩次)。

//登錄

- (void)loginViewShowingLoggedInUser:(FBLoginView *)loginView

{
    // first get the buttons set for login mode


       NSLog(@"success");


    [HUD showWhileExecuting:@selector(LoadingProcess) onTarget:self withObject:nil animated:YES];

    if (FBSession.activeSession.isOpen)
    {

       NSLog(@"TOKEN : %@",[[FBSession activeSession]accessTokenData]);

        FBRequest *friendRequest = [FBRequest requestForGraphPath:@"me/friends?fields=name,picture,birthday,location"];

        [friendRequest startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error)
        {
            NSArray *data = [result objectForKey:@"data"];
            for (FBGraphObject<FBGraphUser> *friend in data)
            {
                [delegate.friendsListArray addObject:friend];
                NSLog(@"%@:%@:%@", [friend name],[friend birthday],[friend id]);
            }

             if ([delegate.friendsListArray count]!=0)

             {


            NSUserDefaults * standardDefaults=[NSUserDefaults standardUserDefaults];
            [[NSUserDefaults standardUserDefaults] synchronize];

            [standardDefaults setObject:delegate.friendsListArray forKey:@"FriendsListArray"];
            [standardDefaults setBool:YES forKey:@"logged_in"];
            [standardDefaults synchronize];


            NSLog(@"%@",[standardDefaults objectForKey:@"FriendsListArray"]);

            BirthdayList * birthdaylist=[[BirthdayList alloc]init];
            [self.navigationController pushViewController:birthdaylist animated:NO];
            [birthdaylist release];
              }
            else
            {
                UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Friends not found" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
                [alertView show];
                [alertView release];
            }
        }];

    }

}

在Settings.m中

-(void)LogoutTapped
{


    NSLog(@"Logged out of facebook");

    NSUserDefaults * standardDefaults=[NSUserDefaults standardUserDefaults];
    [[NSUserDefaults standardUserDefaults] synchronize];

    NSArray *keys = [[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]allKeys]copy];

       for(NSString *key in keys)
    {
        [standardDefaults removeObjectForKey:key];
        [standardDefaults removeObjectForKey:@"FriendsListArray"];
        [standardDefaults removeObjectForKey:@"logged_in"];
        [standardDefaults synchronize];

        NSLog(@"Key Name: %@", key);

    }

    [delegate.friendsListArray removeAllObjects];
    [keys release];

    NSLog(@"%@",[standardDefaults objectForKey:@"FriendsListArray"]);

    NSLog(@"%@",[standardDefaults objectForKey:@"logged_in"]);


    NSUserDefaults * userinfodefaults=[NSUserDefaults standardUserDefaults];
    NSArray *userkeys = [[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]allKeys]copy];

    for(NSString *userkey in userkeys)
    {
        [userinfodefaults removeObjectForKey:userkey];
        [userinfodefaults removeObjectForKey:@"userinfo"];
        [userinfodefaults removeObjectForKey:@"userbool"];

        NSLog(@"key1 Name: %@",userkey);
    }

    [delegate.UserListArray removeAllObjects];
    [delegate.Setmonthdataarray removeAllObjects];
    [delegate.SetMonthlistarray removeAllObjects];
    [userinfodefaults synchronize];
    [userkeys release];


    FBSession *session=[FBSession activeSession];
    [session closeAndClearTokenInformation];
    [session close];
    [[FBSession activeSession] closeAndClearTokenInformation];
    [[FBSession activeSession] close];
    [FBSession setActiveSession:nil];

    [delegate facebook].accessToken=nil;
    [delegate facebook].expirationDate=nil;

    NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    NSArray* facebookCookies = [cookies cookiesForURL:
                                [NSURL URLWithString:@"http://login.facebook.com"]];
    for (NSHTTPCookie* cookie in facebookCookies)
    {
        [cookies deleteCookie:cookie];
    }

    for (NSHTTPCookie *_cookie in cookies.cookies)
    {
        NSRange domainRange = [[_cookie domain] rangeOfString:@"facebook"];
        if(domainRange.length > 0){
            [cookies deleteCookie:_cookie];
        }
    }


    UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Logout" message:@"Logout Successfully" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
    [alert release];

    MainList * mainlist=[[MainList alloc]initWithNibName:@"MainList" bundle:nil];

    [self.navigationController pushViewController:mainlist animated:NO];

    [mainlist release];

}

還有一個疑問。

要登錄facebook,我使用了Facebook SDK。

要注銷Facebook,我使用了Facebook庫。(Facebook.m,Facebook.h)

有什么問題嗎?

任何想法請幫助我。

以下代碼可能對您有幫助:

-(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];
            }
        }
    }//

根據您的情況,我假設您的設備未安裝Facebook應用,也不希望使用iOS 6系統身份驗證,這將使默認登錄行為保留為使用Safari。 如果您要清除Safari cookie,這應該可以工作,但是為了使您的場景更流暢,請使用FBSession openWithBehavior:completionHandler:方法並指定FBSessionLoginBehaviorForcingWebview的行為,以便它使用內聯Webview對話框進行身份驗證。

有關示例,請參閱Facebook iOS SDK中的SwitchUserSample,因為該示例演示了可以在多個帳戶之間切換的應用程序。

https://developers.facebook.com/docs/ios/login/#logout

https://developers.facebook.com/docs/ios/ios-sdk-tutorial/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM