リンクを共有するためのボタンがあります。私は基本的に 2 つの呼び出しを使用しています:
openActiveSessionWithReadPermissions
とrequestNewPublishPermissions
.
これはボタンアクションです:
- (IBAction) shareFacebookButtonAction:(id)sender
if (![[FBSession activeSession] isOpen])
{
NSArray *permissions = @[@"read_friendlists", @"email"];
[FBSession openActiveSessionWithReadPermissions:permissions
allowLoginUI:YES
completionHandler:^(FBSession *session,
FBSessionState state,
NSError *error)
{
if (FB_ISSESSIONOPENWITHSTATE([session state]))
{
[self _prepareShare];
}
else
{
// show alert view with error
}
}];
}
else
{
[self _prepareShare];
}
}
これで、セッションで許可が見つからない場合は、公開許可を求めています
-(void) _prepareShare;
{
if ([FBSession.activeSession.permissions
indexOfObject:@"publish_actions"] == NSNotFound)
{
[FBSession.activeSession
requestNewPublishPermissions:
[NSArray arrayWithObject:@"publish_actions"]
defaultAudience:FBSessionDefaultAudienceFriends
completionHandler:^(FBSession *session, NSError *error)
{
if (!error)
{
[self _share];
}
else
{
//error
}
}];
} else
{
[self _share];
}
}
_share は何かを投稿するだけです
-(void) _share;
{
NSMutableDictionary *params_dict = [NSMutableDictionary dictionary];
// setting some params
[FBRequestConnection startWithGraphPath:@"me/feed" parameters:params_dict HTTPMethod:@"POST" completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
{
if (result)
{
// sharing succedeed, do something
}
else if (error)
{
//sharing failed, do something else
}
}];
}
初めて共有しようとすると (既に iOS6 で FB にログオンしており、アプリは既に承認されています) の完了ハンドラーがopenActiveSessionWithReadPermissions
2 回呼び出されています。結果として、_share
も 2 回呼び出されます。1 回目は (既に公開権限がある場合) のelse
部分で_prepareShare
、2 回目は openSessionForPublishPermissions の完了ハンドラーで呼び出されます。そのため、アプリで共有したのは初めてで、Facebook ウォールに 2 つの投稿があります。また、クラッシュレポートもありましたFBSession: It is not valid to reauthorize while a previous reauthorize call has not yet completed
(再度発生させることができませんでした)。
この状況を処理する適切な方法は何ですか?