![](/img/trans.png)
[英]IOS Facebook sdk login Dialog shows up twice (2 login dialogs)
[英]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_user
和xs
)。 如果不是,我從我的存儲中取出這些cookie並將它們添加到[NSHTTPCookieStorage sharedHTTPCookieStorage]
。 它的工作原理!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.