2

iOSアプリからユーザーのタイムラインにテキストとリンクを投稿したい。FBWebDialogs の例をコピーして貼り付けます。

問題 1: 投稿は自分のタイムラインに表示されますが、許可は「自分のみ」であり、友達や公開ではありません。

問題 2: 結果オブジェクト (FBWebDialogResult) が nil です。ログがコンソールに表示されます.NSLog(@"ユーザーはストーリーの公開をキャンセルしました。");

問題 3: プレビュー ボックスを公開に設定しても、プレビュー ボックスの権限が「自分だけ」である ここに画像の説明を入力

私のFacebookページの添付設定: ここに画像の説明を入力

これが私のコードです:

[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"]) {
                 NSLog(@"User canceled story publishing.");
             } else {
                 NSString *msg = [NSString stringWithFormat:
                                  @"Posted story, id: %@",
                                  [urlParams valueForKey:@"post_id"]];
                 [[[UIAlertView alloc] initWithTitle:@"Result"
                                             message:msg
                                            delegate:nil
                                   cancelButtonTitle:@"OK!"
                                   otherButtonTitles:nil]
                  show];
             }
         }
     }
 }];

私のアプリの設定ページはデフォルトで「自分だけ」になっています。すべてのユーザーがここでこの設定を変更するとは思いません。

4

1 に答える 1

3

ああ、神様。私は一日中苦労しましたが、進歩はありませんでした。質問するとすぐに解決策が見つかりました。

問題は、不適切なサンプル コードをコピーしたことです。[FBSession openActiveSessionWithPublishPermissions] に変更し、問題を解決しました。

これが私が使用したログインコードです。投稿を公開できるようになりました。

- (void)buttonRequestClickHandler:(id)sender {
// FBSample logic
// Check to see whether we have already opened a session.
if (FBSession.activeSession.isOpen) {
    // login is integrated with the send button -- so if open, we send
    //  [self sendRequests];
    NSLog(@"Login in facebook");
} else {

      NSArray *permission = [NSArray arrayWithObjects:@"publish_actions", nil];
    [FBSession openActiveSessionWithPublishPermissions:permission defaultAudience:FBSessionDefaultAudienceEveryone allowLoginUI:YES completionHandler:^(FBSession *session,
                                                      FBSessionState status,
                                                      NSError *error) {
                                      // if login fails for any reason, we alert
                                      if (error) {
                                          UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                                                          message:error.localizedDescription
                                                                                         delegate:nil
                                                                                cancelButtonTitle:@"OK"
                                                                                otherButtonTitles:nil];
                                          [alert show];
                                          // if otherwise we check to see if the session is open, an alternative to
                                          // to the FB_ISSESSIONOPENWITHSTATE helper-macro would be to check the isOpen
                                          // property of the session object; the macros are useful, however, for more
                                          // detailed state checking for FBSession objects
                                      } else if (FB_ISSESSIONOPENWITHSTATE(status)) {
                                          // send our requests if we successfully logged in
                                          NSLog(@"Login in facebook");                                          }
                                  }];
}
于 2013-04-30T04:00:23.873 に答える