簡體   English   中英

Facebook顯示登錄對話框而不是應用請求對話框

[英]Facebook shows login dialog instead of app request dialog

在我的應用程序中,我需要向用戶提供Facebook AppRequest對話框。 我是這樣做的:

 NSMutableDictionary* params =
[NSMutableDictionary dictionaryWithObject:friendId forKey:@"to"];

[FBWebDialogs presentRequestsDialogModallyWithSession:FBSession.activeSession
                                              message:NSLocalizedString(@"AppRequestMessage", "")
                                                title:NSLocalizedString(@"AppRequestTitle", "")
                                           parameters:params
                                              handler:^(FBWebDialogResult result, NSURL *url, NSError *error){

                                                  if (result == FBWebDialogResultDialogNotCompleted)
                                                  {
                                                      if (error)
                                                      [FRBaseViewController showAlertWithTitle:NSLocalizedString(@"AppRequestFail", "") message:error.localizedDescription];
                                                  }
                                                  else
                                                  {
                                                      if ([url.description rangeOfString:@"error"].location == NSNotFound)
                                                      {
                                                          if ([FRDataModel sharedInstance].shouldChallenge)
                                                              [[FRDataModel sharedInstance] finishedRatingFriend];
                                                      }
                                                  }

                                                  FRAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
                                                  FRNavigationController *navController = (FRNavigationController *)delegate.navigationController;
                                                  [(FRNavigationController *)navController pseudoPopToFrindViewController];
                                              }];

而且大部分時間它都可以正常工作。 但有時候,當用戶登錄到應用程序時已經過了很長時間,它顯示的不是AppRequest對話框,而是登錄對話框。 一旦用戶注銷並再次登錄,它就會再次正常工作。 我認為在某些時候Facebook SDK開始認為用戶沒有登錄(盡管用戶肯定已登錄)或類似的東西。 你見過這樣的行為嗎? 你能告訴我什么嗎? 謝謝

你看過正在創建的會話,我的意思是檢查[FBSession activeSession]。 可能是當您的用戶登錄時,他們有會話並且只要他們使用該應用程序就會保持打開狀態。 一旦他們關閉並重新訪問您的應用程序,他們的會話可能已經關閉,從而迫使他們再次登錄?

你有什么嘗試? 我和FBSDK玩了很多,所以讓我更詳細地了解你的嘗試/你的情況,我可以看到我的實施有什么不同。

謝謝

這就是我打開Facebook會話的方式,通過這樣做它嘗試Facebook登錄,更喜歡系統帳戶並在必要時回退到快速應用程序切換。 WebView絕對是最后的選擇。

// Initialize a session object
FBSession *session = [[FBSession alloc] init];

// Set the active session
[FBSession setActiveSession:session];

// Open the session
[session openWithBehavior:FBSessionLoginBehaviorUseSystemAccountIfPresent
        completionHandler:^(FBSession *session,
                            FBSessionState status,
                            NSError *error) {

    // You're good to go
    //
    if (!error && FBSession.activeSession.isOpen) {

        // Retrieve Token
        //
        FBAccessTokenData *data = [FBSession.activeSession accessTokenData];
        NSString *accessToken = data.accessToken;

        if ([FRDataModel sharedInstance].shouldChallenge)
            [[FRDataModel sharedInstance] finishedRatingFriend];
    }
    else {
        [FRBaseViewController showAlertWithTitle:NSLocalizedString(@"AppRequestFail", "") message:error.localizedDescription];
    }

    FRAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
    FRNavigationController *navController = (FRNavigationController *)delegate.navigationController;
    [(FRNavigationController *)navController pseudoPopToFrindViewController];
}];

官方文件在這里

最終我找到了解決方案。 這種行為的原因是缺少正確的Facebook工作所需的一些cookie。 我不知道他們為什么有時會從NSHTTPCookieStorage消失,但只知道他們確實幫助了我很多。 我做的是我為cookie提供了另一個存儲空間。 現在我每次更新cookie時都會更新存儲。 然后我檢查[NSHTTPCookieStorage sharedHTTPCookieStorage]包含所需的cookie(它們的名稱是c_userxs )。 如果不是,我從我的存儲中取出這些cookie並將它們添加到[NSHTTPCookieStorage sharedHTTPCookieStorage] 它的工作原理!

暫無
暫無

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

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