2013-10-08 85 views
0

我正在實施一個應用程序,用戶將能夠發佈狀態。如果用戶在他/她的設備默認登錄,然後下面的代碼將工作在Facebook上發佈狀態

if(!self.accountStore) 
    self.accountStore = [[ACAccountStore alloc] init]; 
if(NSClassFromString(@"SLComposeViewController") != nil) 
{ 
    ACAccountType *facebookTypeAccount = [self.accountStore 
    accountTypeWithAccountTypeIdentifier:@"com.apple.facebook"]; 
    NSLog(@"facebookTypeAccount..:%@",facebookTypeAccount); 
    NSArray *accounts = [self.accountStore accountsWithAccountType:facebookTypeAccount]; 
    if (facebookTypeAccount) { 
     if ([accounts respondsToSelector:@selector(count)]) { 
      [self.accountStore requestAccessToAccountsWithType:facebookTypeAccount 
                 options:@{ACFacebookAppIdKey: @"214267482030378", ACFacebookPermissionsKey: @[@"email"]} 
                completion:^(BOOL granted, NSError *error) { 
                 if(granted){ 
                  NSArray *accounts = [self.accountStore accountsWithAccountType:facebookTypeAccount]; 
                  _facebookAccount = [[accounts lastObject]retain]; 
                 } 
                 else 
                 { 
                  NSLog(@"Failed, Error: %@", error); 
                 } 
                }]; 
     } 
     else 
     { 
      [self openSession]; 
     } 
    } 
} 

否則控制會去這個方法

- (void)openSession{ 
NSArray *permissions = [[NSArray alloc] initWithObjects: 
         @"publish_stream",@"email", 
         nil]; 
[FBSession openActiveSessionWithPublishPermissions:permissions 
            defaultAudience:FBSessionDefaultAudienceEveryone 
             allowLoginUI:YES 
           completionHandler:^(FBSession *session, FBSessionState state, NSError *error) 
{ 
    [self sessionStateChanged:session state:state error:error]; 

}]; 

}

但隨着登錄我需要在發送狀態Facebook的。如果我用這種方法

-(void)poststatus{ 
[[FBSession activeSession] reauthorizeWithPublishPermissions:@[ @"publish_stream" ] 
defaultAudience:FBSessionDefaultAudienceEveryone completionHandler:^(FBSession 
*authSession, NSError *authError) { 
    // If auth was successful, create a status update FBRequest 
    if (!authError) { 
     FBRequest *postRequest = [FBRequest requestForPostStatusUpdate:@"Hello, world!"]; 
     [postRequest startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) { 
      // TODO: Check for success/failure here 
     }]; 
    } 
}]; 

}試圖

則給出了錯誤失敗,錯誤:錯誤域= com.apple.accounts代碼= 8「的操作無法完成(COM。 apple.accounts錯誤8)「請幫助我,如果有人對這個概念有一些想法。

在此先感謝。

回答

1

問:

@[@"publish_stream", @"publish_actions"] 

剛剛相反:

@[ @"publish_stream" ] 

瞭解更多: https://developers.facebook.com/docs/reference/login/extended-permissions/

publish_stream The publish_stream permission is required to post to a Facebook Page's timeline. For a Facebook User use publish_actions. 

而且使用的是過時的功能。試着用:

[FBSession requestNewPublishPermissions:defaultAudience:completionHandler:]; 
+0

我已經嘗試過,但我的答案不工作@Grzegorz Krukowski –

+0

一個提示 - 你正在使用的方法已過時。 –

+0

我在我的應用程序上測試了這個代碼 - 它的工作原理。也許你在應用程序設置上有一些問題?你在沙盒工作嗎? –