最近Facebook SDK 3.1を使い始めましたが、openActiveSessionWithReadPermissions
を使ってログインする際にいくつかの問題が発生しています。openActiveSessionWithReadPermissionsが自動的にログインしない
実際にはlogginは完全に機能します。キャッシュされたトークンが利用可能な場合、FacebookのUIを提示せずにログインし、そうでなければUIを表示します。
reauthorizeWithPublishPermissions
を呼び出した後に問題が発生します。 reauthorizeWithPublishPermissions
に電話してアプリケーションを終了してもう一度開き、openActiveSessionWithReadPermissions
に電話をかけると、FacebookのUIが表示され、利用可能なキャッシュトークンがあるにも関わらず、ユーザーは「はい」と言う必要があります。
私がreauthorizeWithPublishPermissions
に電話をかけた場合、誤ってFacebookのUIが表示されます。そうでない場合はすべて正常に動作します。
読み取りコードのオープン:
[FBSession openActiveSessionWithReadPermissions:readpermissions allowLoginUI:YES
completionHandler:^(FBSession *aSession, FBSessionState status, NSError *error) {
[self sessionStateChanged:[FBSession activeSession] state:status error:error];
if (status != FBSessionStateOpenTokenExtended) {
// and here we make sure to update our UX according to the new session state
FBRequest *me = [[FBRequest alloc] initWithSession:aSession
graphPath:@"me"];
[me startWithCompletionHandler:^(FBRequestConnection *connection,
NSDictionary<FBGraphUser> *aUser,
NSError *error) {
self.user = aUser;
aCompletionBlock(aSession, status, error);
}];
}
}];
sessionStateChanged機能:事前にすべてのため
- (void)doPublishAction:(void(^)(FBSession *aSession, NSError *error))aPublishAction {
if ([FBSession.activeSession.permissions
indexOfObject:@"publish_actions"] == NSNotFound) {
NSArray *writepermissions = [[NSArray alloc] initWithObjects:
@"publish_stream",
@"publish_actions",
nil];
[[FBSession activeSession]reauthorizeWithPublishPermissions:writepermissions defaultAudience:FBSessionDefaultAudienceFriends completionHandler:^(FBSession *aSession, NSError *error){
if (error) {
NSLog(@"Error on public permissions: %@", error);
}
else {
aPublishAction(aSession, error);
}
}];
}
else {
// If permissions present, publish the story
aPublishAction(FBSession.activeSession, nil);
}
}
ありがとう:
- (void)sessionStateChanged:(FBSession *)aSession state:(FBSessionState)state error:(NSError *)error {
if (aSession.isOpen) {
// Initiate a Facebook instance and properties
if (nil == self.facebook || state == FBSessionStateOpenTokenExtended) {
self.facebook = [[Facebook alloc]
initWithAppId:FBSession.activeSession.appID
andDelegate:nil];
// Store the Facebook session information
self.facebook.accessToken = FBSession.activeSession.accessToken;
self.facebook.expirationDate = FBSession.activeSession.expirationDate;
}
} else {
// Clear out the Facebook instance
if (state == FBSessionStateClosedLoginFailed) {
[FBSession.activeSession closeAndClearTokenInformation];
}
self.facebook = nil;
}
}
テストのための空のaPublishActionとの通話を、公開、私はすべての助けに感謝します!
私はpublish_actionsが必要なものだと思います。今はpublish_streamを含んでいると思います。 – SAHM
この解決策を見つけたことがありますか?私はまったく同じ問題を抱えています。 – Casey
解決策が見つからなかったため、実際にはパブリッシュのアクセス権が必要なくなり、解決策を見つける必要はありませんでした。 –