2013-07-28 122 views
0

我想使用Facebook SDK發佈狀態。 部分用戶已經使用Facebook登錄。 所以我有這樣的代碼:Facebook SDK和iOS

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: 
             } 
            }]; 
} 

所以,讓我們專注於它假設該用戶打開的會話(第二個是剛剛開放的情況下,一個新的,沒有可用的會話)的第一部分。如何在授予發佈權限後發佈帶有網址和圖片的狀態? Facebook的例子根本沒有幫助。我發現了其他一些例子,但其中大部分都過時了。

我設法張貼一個簡單的職位有:擠級權限發佈後

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

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


                  // TODO: Check for success/failure here 

                 }]; 

。我想要一些類似於url description imgurl和title的東西。

回答

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]; 
          }]; 

}]; 

共享網址:

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

       } 
      }]; 
     } 
    } 
} 

希望這會有所幫助... Loo k在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; 
      }]; 
+0

您好我嘗試了第二個。似乎沒有工作 – BlackM

+0

圖像代碼的工作? – lakesh

+0

我沒有嘗試過,因爲我沒有興趣上傳照片 – BlackM