Facebook SDK を使用するのはこれが初めてなので、Facebook のチュートリアルに従いましたが、ログイン/権限フローが正しくない可能性があります。私のアプリケーションはウォールで共有する必要があるだけです。SDK 3.2.1 を使用しています。
ユーザーが共有ボタンをタップするたびに、+ (BOOL)openActiveSessionWithReadPermissions:(NSArray*)readPermissions allowLoginUI:(BOOL)allowLoginUI completionHandler:(FBSessionStateHandler)handler
メソッドを使用してログインします。
初めて、電子メールとパスワードの組み合わせを要求されます。私が直面している問題は、保存されたトークンを後で再利用しないことです:
トークンが保存されている場合 (ユーザーが以前に Facebook にログインした場合)、アプリは "You already authorized app_name" を使用してアクセス許可を要求し、共有時に再度要求する可能性が高くなります。
が 2 回目に呼び出された場合
openActiveSessionWithReadPermissions
、パーミッションは要求されません。3 回目は、もう一度尋ねます。
セッションが自動的に閉じられていることがわかりましたが、その理由がわかりません。FBSessionStateClosed
完了ハンドラーは、直前に がどのように受信されるかを示していますFBSessionStateOpen
。これが、Facebook SDK が 1 回おきに承認を求め続ける理由だと思います。
これらの 2 つのトレースは、2 回目のopenActiveSessionWithReadPermissions
呼び出しからのものです (セッションが閉じられ、再び開かれる様子を確認できます)。次にこのメソッドが呼び出されると、閉じられたセッションを受け取るだけで、「認証済み」画面が表示されます。
私のコードは以下のようなものです:
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
return [FBSession openActiveSessionWithReadPermissions:nil
allowLoginUI:allowLoginUI
completionHandler:^(FBSession *session,
FBSessionState state,
NSError *error) {
[self sessionStateChanged:session
state:state
error:error];
}];
}
- (void)sessionStateChanged:(FBSession *)session
state:(FBSessionState) state
error:(NSError *)error
{
switch (state) {
case FBSessionStateOpen:
if (!error) {
// We have a valid session
NSLog(@"User session found");
}
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
[FBSession.activeSession closeAndClearTokenInformation];
break;
default:
break;
}
[[NSNotificationCenter defaultCenter]
postNotificationName:FBSessionStateChangedNotification
object:session];
}
誰かがこれについて助けてくれることを願っています。私はかなりイライラしています。