0

Facebook SDK を使用してステータスを投稿しようとしています。一部のユーザーは、Facebook を使用して既にサインインしています。だから私はこのコードを持っています:

 if (FBSession.activeSession.isOpen) {


    NSLog(@"Already Open%@",[[FBSession activeSession] accessTokenData].accessToken);

   // NSString *tok = [[FBSession activeSession] accessTokenData].accessToken;

    NSArray *permissions = [NSArray arrayWithObjects:@"publish_actions", nil];

    [[FBSession activeSession] requestNewPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceFriends
                                               completionHandler:^(FBSession *session,NSError *error) {
                                                   if(!error){
                                                       NSLog(@"Publish Permission Granted");

                                                   }
                                                   else
                                                   {
                                                       NSLog(@"Publish to get Read Permission");
                                                   } }];



    //Remove indicator
    [_activityView removeFromSuperview];


} else {


    // OPEN Session!
    [FBSession openActiveSessionWithReadPermissions:nil
                                       allowLoginUI:YES
                                  completionHandler:^(FBSession *session,
                                                      FBSessionState status,
                                                      NSError *error) {
                                      // if login fails for any reason, we alert
                                      if (error) {

                                          // show error to user.

                                      } else if (FB_ISSESSIONOPENWITHSTATE(status)) {

                                          // no error, so we proceed with requesting user details of current facebook session.

                                          NSLog(@"----%@",[session accessTokenData].accessToken);

                                          //NSString *tok = [session accessTokenData].accessToken;

                                          NSArray *permissions = [NSArray arrayWithObjects:@"publish_actions", nil];

                                          [[FBSession activeSession] requestNewPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceFriends
                                                                                completionHandler:^(FBSession *session,NSError *error) {
                                                                                    if(!error){
                                                                                        NSLog(@"Publish Permission Granted");
                                                                                    }
                                                                                    else
                                                                                    {
                                                                                        NSLog(@"Publish to get Read Permission");
                                                                                    } }];


                                          [_activityView removeFromSuperview];

                                          // [self promptUserWithAccountName];   // a custom method - see below:
                                      }
                                  }];  
}

したがって、ユーザーがセッションを開いていると仮定する最初の部分に焦点を当てましょう (2 番目の部分は、利用可能なセッションがない場合に新しいセッションを開くだけです)。公開許可を与えた後、URL と写真を含むステータスを投稿するにはどうすればよいですか? Facebookの例はまったく役に立ちません。他にもいくつかの例を見つけましたが、それらのほとんどは時代遅れです。

私は簡単な投稿を投稿することができました:

FBRequest *postRequest = [FBRequest requestForPostStatusUpdate:@"hi" ];

                                                       [postRequest startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) {


                                                           // TODO: Check for success / failure here

                                                       }];

公開許可を与えた後。URLの説明imgurlとタイトルに似たものが欲しいです。

4

1 に答える 1

1

これが私のibactionメソッドでのやり方です:

共有画像:

UIImage *img = myImage; 
FBLoginView *loginview = [[FBLoginView alloc] init];
loginview.delegate = self;

[self performPublishAction:^{

    [FBRequestConnection startForUploadPhoto:img
                           completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
                               [self showAlert:@"Photo Post" result:result error:error];
                           }];

}];

共有 URL:

NSURL *urlToShare = [NSURL URLWithString:@"http://developers.facebook.com/ios"];

FBAppCall *appCall = [FBDialogs presentShareDialogWithLink:urlToShare
                                                          name:@"Hello Facebook"
                                                       caption:nil
                                                   description:@"The 'Hello Facebook' sample application showcases simple Facebook integration."
                                                       picture:nil
                                                   clientState:nil
                                                       handler:^(FBAppCall *call, NSDictionary *results, NSError *error) {
                                                           if (error) {
                                                               NSLog(@"Error: %@", error.description);
                                                           } else {
                                                               NSLog(@"Success!");
                                                           }
                                                       }];

これらも追加します。

- (void) performPublishAction:(void (^)(void)) action
{
    if([[FBSession activeSession]isOpen])
    {
        if ([FBSession.activeSession.permissions indexOfObject:@"publish_actions"] == NSNotFound) {
            // if we don't already have the permission, then we request it now
            [FBSession.activeSession requestNewPublishPermissions:@[@"publish_actions"]
                                                  defaultAudience:FBSessionDefaultAudienceFriends
                                                completionHandler:^(FBSession *session, NSError *error) {
                                                    if (!error) {
                                                        action();
                                                    }
                                                    //For this example, ignore errors (such as if user cancels).
                                                }];
        } else {
            action();
        }
    }
    else
    {       
        [FBSession openActiveSessionWithPublishPermissions:[NSArray arrayWithObject:@"publish_actions"]
                                           defaultAudience:FBSessionDefaultAudienceFriends
                                              allowLoginUI:YES
                                         completionHandler:^(FBSession *session, FBSessionState status, NSError *error) {
                                             if (!error && status == FBSessionStateOpen) {

                                             }else{
                                                 NSLog(@"Session error");
                                                 [self fbResync];
                                                 [NSThread sleepForTimeInterval:0.5];   //half a second
                                                 [FBSession openActiveSessionWithPublishPermissions:[NSArray arrayWithObject:@"publish_actions"]
                                                                                    defaultAudience:FBSessionDefaultAudienceFriends
                                                                                       allowLoginUI:YES
                                                                                  completionHandler:^(FBSession *session, FBSessionState status, NSError *error){

                                                                                  }];
                                             }
                                         }];
    }
}

- (void)loginViewShowingLoggedInUser:(FBLoginView *)loginView
{

}

- (void)loginViewFetchedUserInfo:(FBLoginView *)loginView
                            user:(id<FBGraphUser>)user
{
    self.loggedInUser = user;
}

- (void)loginViewShowingLoggedOutUser:(FBLoginView *)loginView
{
    self.loggedInUser = nil;
}

-(void)fbResync
{
    ACAccountStore *accountStore;
    ACAccountType *accountTypeFB;
    if ((accountStore = [[ACAccountStore alloc] init]) && (accountTypeFB = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook] ) ){

        NSArray *fbAccounts = [accountStore accountsWithAccountType:accountTypeFB];
        id account;
        if (fbAccounts && [fbAccounts count] > 0 && (account = [fbAccounts objectAtIndex:0])){

            [accountStore renewCredentialsForAccount:account completion:^(ACAccountCredentialRenewResult renewResult, NSError *error) {
                //we don't actually need to inspect renewResult or error.
                if (error){

                }
            }];
        }
    }
}

これが役に立てば幸いです... Facebook SDK サンプルの HelloFacebookSample を見てください。

これを試して:

[self performPublishAction:^{
                NSString *message = [NSString stringWithFormat:@"Updating status for %@ at %@", self.loggedInUser.first_name, [NSDate date]];

                [FBRequestConnection startForPostStatusUpdate:message
                                            completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {

                                                [self showAlert:message result:result error:error];
                                                self.buttonPostStatus.enabled = YES;
                                            }];

                self.buttonPostStatus.enabled = NO;
            }];
于 2013-07-28T11:26:16.070 に答える