1

Facebook に投稿するためにこのアプリケーションを使用していますが、現在、一部の iOS 6.0 デバイスに投稿する際に問題に直面しています。Facebook SDK 3.1 のみを使用し、アクションを公開しようとしています。以下は、読み取り許可を開始するためにクラスで使用しているコードです。

アクセスには、次のコードを使用しています。

// CALLING THIS CODE BLOCK IN ONE BUTTON ACTION.
        if (FBSession.activeSession.isOpen)
        {
            [self pickaChoice];
        } 
        else 
        {
            [FBSession openActiveSessionWithPublishPermissions:[NSArray arrayWithObjects:@"publish_actions", nil]
                                               defaultAudience:FBSessionDefaultAudienceEveryone
                                                  allowLoginUI:YES
                                             completionHandler:
             ^(FBSession *session,
               FBSessionState state, NSError *error) {
                 [self sessionStateChanged:session state:state error:error];
             }];
        }

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

    switch (state)
    {
        case FBSessionStateOpen:
            [FBSession setActiveSession:session];
            [self pickaChoice];


            break;
        case FBSessionStateClosed:
        case FBSessionStateClosedLoginFailed:
            // Once the user has logged in, we want them to
            // ...

            [FBSession.activeSession closeAndClearTokenInformation];

            break;
        default:
            break;
    }

    if (error) {
        NSString* message = [NSString stringWithFormat:@"You have disallowed application to post on your behalf."];
        UIAlertView *alertView = [[UIAlertView alloc]
                                  initWithTitle:@"Error"
                                  message:message
                                  delegate:nil
                                  cancelButtonTitle:@"OK"
                                  otherButtonTitles:nil];
        [alertView show];
        [FBSession.activeSession closeAndClearTokenInformation];
    }
}


-(void)pickaChoice
{
    /* Just a class to select message and then retrieve the message in the next function 
    -(void)didSelectaPhraseToPost:(NSString *)message   */
    FBPublishViewController *fbPublishViewController = [[FBPublishViewController alloc] initWithNibName:@"FBPublishViewController"
                                                                                                 bundle:[NSBundle mainBundle]];

    fbPublishViewController.selectionDelegate = self;

    [self presentViewController:fbPublishViewController
                       animated:YES
                     completion:^(){
                         //nil
                     }];

}

-(void)didSelectaPhraseToPost:(NSString *)message
{
    // Selecting a message from a class and retrieving here. This is the message to post on the feed. 

    [self publishMessage:message];
}

- (void) performPublishAction:(void (^)(void)) action 
{

    if ([FBSession.activeSession.permissions indexOfObject:@"publish_actions"] == NSNotFound) {
        [FBSession.activeSession reauthorizeWithPublishPermissions:[NSArray arrayWithObject:@"publish_actions"]
                                                   defaultAudience:FBSessionDefaultAudienceFriends
                                                 completionHandler:^(FBSession *session, NSError *error) {
                                                     if (!error) {
                                                         action();
                                                     }
                                                     //For this example, ignore errors (such as if user cancels).
                                                 }];
    } else {
        action();
    }

}

- (void)publishMessage:(NSString *)message
{
    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   @"APP_NAME", @"name",
                                   message, @"message",
                                   APP_LINK, @"link",
                                   @"APP_PICTURE", @"picture",
                                   nil];

     [self.spinner startAnimating];

       [self performPublishAction:^{
            [FBRequestConnection
             startWithGraphPath:@"me/feed"
             parameters:params
             HTTPMethod:@"POST"
             completionHandler:^(FBRequestConnection *connection,
                                 id result,
                                 NSError *error) {


                 [self.spinner stopAnimating];

                 NSString *messageTitle = nil;

                 NSString *message = nil;

                 // If the result came back okay with no errors...
                 if (result && !error)
                 {
                     NSLog(@"accessToken : %@",[FBSession activeSession].accessToken );
                     NSLog(@"result : %@",result);
                     messageTitle = @"Success";
                     message = @"App has posted to facebook";

                 }else{
                     NSLog(@"error : %@",error);
                     messageTitle = @"Error v1.1";
                     //message =  error.localizedDescription;
                     message = @"Unable to process the request. Please check the permissions for the application.";
                     [FBSession.activeSession closeAndClearTokenInformation];
                 }

                 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:messageTitle
                                                                 message:message
                                                                delegate:nil
                                                       cancelButtonTitle:@"OK"
                                                       otherButtonTitles: nil];
                 [alert show];

                 //TODO maybe clear connection here if we want to force an new login 

             }];
       }];

}

問題は、一部の iOS 6.0 デバイスで facebook.sdk.error 3 がスローされ、一部のデバイスでは、アプリケーションが投稿を許可されている場合でも facebook.sdk.error 2 がスローされます。現在のコードでは、よりユーザーフレンドリーなメッセージを表示するためにメッセージをカスタムに変更しましたが、localizedDescription を出力すると、それらが表示されます。

ほとんどの iOS 6.0 デバイスでは、コードはまったく問題なく機能しており、メッセージが投稿されています。問題の正確な場所を特定できる人がいたら教えてください。私はこれで何日も過ごしましたが、まだ問題がどこにあるのかわかりません。

編集1 Facebookアプリケーションがインストールされ、ユーザーがそれを介してログインし、ネイティブ設定を介してログインしていない場合、このような問題に直面していることが観察されたパターン。

4

2 に答える 2

0

iOS のバージョンを調べて、iOS 6.0 の場合は Apple のデフォルトの facebook shar ビューを使用するとよいでしょう。また、下のバージョンの場合は、Graph API を使用する必要があります。

于 2013-02-04T07:11:40.263 に答える