Facebook SDK和iOS

Facebook SDK和iOS,ios,facebook,facebook-graph-api,Ios,Facebook,Facebook Graph Api,我正在尝试使用Facebook SDK发布状态。 一些用户已经使用Facebook登录。 所以我有这个代码: if (FBSession.activeSession.isOpen) { NSLog(@"Already Open%@",[[FBSession activeSession] accessTokenData].accessToken); // NSString *tok = [[FBSession activeSession] accessTokenData].a

我正在尝试使用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:
                                      }
                                  }];  
}
因此,让我们关注第一部分,即假设用户有打开的会话(第二部分只是在没有可用会话的情况下打开一个新会话)。授予发布权限后,我将如何发布带有url和图片的状态?Facebook的例子一点帮助都没有。我找到了一些其他的例子,但大多数都过时了

我发布了一篇简单的帖子,内容如下:

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

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


                                                           // TODO: Check for success / failure here

                                                       }];

授予发布权限后。我想要一些类似于url描述的图片和标题。

我就是这样做的,在我的iAction方法中:

共享图像:

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){

                }
            }];
        }
    }
}

也不行。我希望第一个案子能成功。有名字、标题、描述的那个。只是什么都不做。FBAppcal变量也不可用。不确定如何帮助您…请阅读以下内容:
[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;
            }];