![](/img/trans.png)
[英]How to request Facebook publish_actions permission during login in iOS
[英]Facebook iOS SDK request permission publish_actions, but user need to input password again
我的項目中使用了Facebook iOS SDK 3.8,現在我將其升級到3.22。
在請求“ publish_actions”權限期間發生了一件奇怪的事情,這是用戶需要再次輸入她的帳戶和密碼。 在以前的版本中,“再次登錄”部分將被跳過。 我想知道Facebook SDK中的邏輯是否更改,或者我必須更改會話處理過程。 關於這個問題有什么想法嗎?
我用來請求“ publish_actions”權限的方式是:
[activeSession openWithBehavior: FBSessionLoginBehaviorForcingWebView
completionHandler:^(FBSession *session,
FBSessionState state, NSError *error) {
[session reauthorizeWithPermissions:@[@"publish_actions"]
isRead:NO
behavior:FBSessionLoginBehaviorForcingWebView
defaultAudience:FBSessionDefaultAudienceFriends
completionHandler:^(FBSession *session, NSError *error) {
}
我也嘗試過
[FBSession.activeSession requestNewPublishPermissions:[NSArray arrayWithObject:@"publish_actions"]
defaultAudience:FBSessionDefaultAudienceFriends
completionHandler:^(FBSession *session, NSError *error) {
__block NSString *alertText;
__block NSString *alertTitle;
_reauthorizeInProgress = YES;
if (!error) {
if ([FBSession.activeSession.permissions
indexOfObject:@"publish_actions"] == NSNotFound){
// Permission not granted, tell the user we will not publish
alertTitle = @"Permission not granted";
alertText = @"Your action will not be published to Facebook.";
[[[UIAlertView alloc] initWithTitle:alertTitle
message:alertText
delegate:self
cancelButtonTitle:@"OK!"
otherButtonTitles:nil] show];
} else {
// Permission granted, publish the OG story
}
} else {
// There was an error, handle it
// See https://developers.facebook.com/docs/ios/errors/
}
}];
此行為是Facebook的默認設置。 文件https://developers.facebook.com/docs/facebook-login/ios/v2.2指出:
WebView的缺點是:
人們每次進行登錄流程時都必須填寫其登錄憑據。
在FBSession.m文件中,我更改了方法中的代碼
- (void)retryableAuthorizeWithPermissions:(NSArray *)permissions
defaultAudience:(FBSessionDefaultAudience)defaultAudience
integratedAuth:(BOOL)tryIntegratedAuth
FBAppAuth:(BOOL)tryFBAppAuth
safariAuth:(BOOL)trySafariAuth
fallback:(BOOL)tryFallback
isReauthorize:(BOOL)isReauthorize
canFetchAppSettings:(BOOL)canFetchAppSettings
並且在請求其他權限時不要刪除cookie,而是
// To avoid surprises, delete any cookies we currently have.
[FBUtility deleteFacebookCookies];
同
// To avoid surprises, delete any cookies we currently have.
if(!isReauthorize){
[FBUtility deleteFacebookCookies];
}
我同意修改SDK源代碼不是一個好主意,但我應該在用戶體驗的一致性和代碼樣式之間取得一些平衡。 (
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.