アプリケーションにFacebookを統合して、Web サイトのリンクを共有しています。これを達成するためにフィード ダイアログを使用しており、このチュートリアルに従っています:
https://developers.facebook.com/docs/howtos/feed-dialog-using-ios-sdk/。
ログインして Facebook に投稿することはできましたが、投稿が成功したときにメッセージを追加したかったのです。チュートリアルにはこれが組み込まれていますが、投稿するたびに、ユーザーがキャンセルをクリックしたときに表示されるメッセージである「ユーザーがストーリーの公開をキャンセルしました。 」がログに表示されます。resultURL
また、ハンドラーが受け取ったパラメーターは、投稿が成功した場合でも常に nil であることをデバッガーで確認しました。
最初は の構成の問題Facebook App
だと思いましたが、テストすることにしました。RPSSample
フレームワークに付属の を開き、ビュー コントローラーのメソッドのpresentRequestsDialogModallyWithSession
呼び出しに完了ハンドラーを追加しました。そこでも成功した投稿でnil を取得していました。clickInviteFriends
RPSFriendsViewController.m
resultURL
私は何かが足りないのですか?
3.5 SDK バージョンが非常に新しいことは知っていますが、ドキュメントによると、 Facebook Web ダイアログresultURL
を介して投稿した後に有効なパラメーターを取得する必要があるため、それがバグなのか、コールバックまたはハンドラーがどこかに欠けているのかはわかりません。 .
念のため、これはFeed Web Dialogへの呼び出しです。チュートリアルにあるものと比べて小さな変更があります (実際にはより単純です)。
- (void)publish: (EntityToShare *)entityToShare {
NSMutableDictionary *params =
[NSMutableDictionary dictionaryWithObjectsAndKeys:
entityToShare.link, @"link",
nil];
// Invoke the dialog
[FBWebDialogs presentFeedDialogModallyWithSession:nil
parameters:params
handler:
^(FBWebDialogResult result, NSURL *resultURL, NSError *error) {
if (error) {
// Error launching the dialog or publishing a story.
NSLog(@"Error publishing story.");
} else {
if (result == FBWebDialogResultDialogNotCompleted) {
// User clicked the "x" icon
NSLog(@"User canceled story publishing.");
} else {
// Handle the publish feed callback
NSDictionary *urlParams = [self parseURLParams:[resultURL query]];
if (![urlParams valueForKey:@"post_id"]) {
// User clicked the Cancel button
NSLog(@"User canceled story publishing.");
} else {
// User clicked the Share button
NSString *msg = [NSString stringWithFormat:
@"Posted story, id: %@",
[urlParams valueForKey:@"post_id"]];
NSLog(@"%@", msg);
// Show the result in an alert
[[[UIAlertView alloc] initWithTitle:@"Result"
message:msg
delegate:nil
cancelButtonTitle:@"OK!"
otherButtonTitles:nil]
show];
}
}
}
}];
}