1

Facebook SDK 3.2

フェイスブックでサインインした直後に、フェイスブックにウォールポストを投稿する必要があります。

ここに私が使用しているコードがあります:

ここで、Facebook のセッションを開きました。

- (IBAction)FBSignup:(id)sender {
    [[AppDelegate sharedObject] openSession:^(FBSession *session, FBSessionState state, NSError *error) {
        [self sessionStateChanged:session state:state error:error];
    }];
}

State Change で、[self populateUserDetails]を使用してデータを入力し、 [self postOnFB]を使用して Facebook ウォールにも投稿しようとしていますが、Facebook ウォールに投稿がありません。

- (void)sessionStateChanged:(FBSession *)session
                      state:(FBSessionState) state
                      error:(NSError *)error
{
    switch (state) {
        case FBSessionStateOpen:

            [self populateUserDetails];
            [self postOnFB];
            break;

        case FBSessionStateClosed:
        case FBSessionStateClosedLoginFailed:
            [FBSession.activeSession closeAndClearTokenInformation];
            break;
        default:
            break;
    }

    [[NSNotificationCenter defaultCenter]
     postNotificationName:SCSessionStateChangedNotification
     object:session];

    if (error) {
        UIAlertView *alertView = [[UIAlertView alloc]
                                  initWithTitle:@"Error"
                                  message:error.localizedDescription
                                  delegate:nil
                                  cancelButtonTitle:@"OK"
                                  otherButtonTitles:nil];
        [alertView show];
    }
}

ここでは、必要な場所に facebook ユーザー オブジェクトを使用してデータを入力しています。

- (void)populateUserDetails
{
    if (FBSession.activeSession.isOpen) {

        [[FBRequest requestForMe] startWithCompletionHandler:
         ^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) {

             if (!error) {
               ///////////////////////////////  
               // Populating Data Where Needed
               ///////////////////////////////


              //   [self postOnFB];
             }
         }];
    }
}

ここで、 [self postOnFB]を使用してウォール ポストを投稿しようとすると、エラーが発生します。

キャッチされていない例外 'com.facebook.sdk:InvalidOperationException' が原因でアプリを終了しています。

ここで私は壁に投稿しています。

- (void)postOnFB{

    // Ask for publish_actions permissions in context
    if ([FBSession.activeSession.permissions
         indexOfObject:@"publish_actions"] == NSNotFound) {
        // No permissions found in session, ask for it
        [FBSession.activeSession requestNewPublishPermissions:[NSArray arrayWithObject:@"publish_actions"]
                                              defaultAudience:FBSessionDefaultAudienceFriends
                                            completionHandler:^(FBSession *session, NSError *error) {
                                                if (!error) {
                                                    [self fbPostSettings];
                                                }
                                            }];
    } else {
        // If permissions present, publish the story
        [self fbPostSettings];
    }
}

Facebook ウォール投稿のパラメーターの設定:

- (void)fbPostSettings{

NSDictionary * facebookParams = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
     kFacebookPostLink,                             @"link",
     kFacebookPostImage,                            @"picture",
     kFacebookPostName,                             @"name",
     kFacebookPostCaption,                          @"caption",
     kFacebookPostDescription,                      @"description",
     nil];

    [FBRequestConnection startWithGraphPath:@"me/feed"
                                 parameters:facebookParams
                                 HTTPMethod:@"POST"
                          completionHandler:^(FBRequestConnection *connection,
                                              id result,
                                              NSError *error) {
                              NSString *alertText;
                              if (error) {
                                  alertText = [NSString stringWithFormat:
                                               @"error: domain = %@, code = %d",
                                               error.domain, error.code];
                              } else {
                                  alertText = [NSString stringWithFormat:
                                               @"Posted action, id: %@",
                                               [result objectForKey:@"id"]];
                              }
                              NSLog(@"%@",alertText);
                          }];
}

- (void)sessionStateChanged:(NSNotification*)notification {
    [self populateUserDetails];
}

いくつかのボタン アクション セレクターでpostOnFBを呼び出すと(Facebook ユーザー オブジェクトを介したデータ入力の完了後)、壁に問題なく投稿されます。しかし、 startWithCompletionHandler: ^(FBRequestConnection *connection, NSDictionary *user, NSError *error)メソッドでユーザー オブジェクトを取得した直後に投稿する必要があります。

助けてください。みんなありがとう :)

4

1 に答える 1

6

セッションを開いてから公開権限を要求する代わりに、セッションを開くために公開権限を直接要求します

[FBSession openActiveSessionWithPublishPermissions:[NSArray arrayWithObjects:@"publish_stream",
                                                    nil] defaultAudience:FBSessionDefaultAudienceEveryone allowLoginUI:YES completionHandler:^(FBSession *session, 
   FBSessionState state, NSError *error) {
if (FBSession.activeSession.isOpen && !error) {
     [self fbPostSettings]; 
}];
于 2013-03-16T01:40:31.563 に答える