1

私のプロジェクトでは 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/
                                        }
                                    }];
4

1 に答える 1

1

この動作は、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 ソースを変更することはお勧めできません。;(

于 2015-02-10T09:50:32.717 に答える