2012-08-07 75 views
13

我嘗試在使用新(beta)facebook ios sdk 3.0的應用中添加facebook集成。所有我想要發佈狀態更新到Facebook。我用FBLoginView登錄Facebook。我按照facebook上的指示將我的應用程序ID放在plist中。我把一些代碼發佈到Facebook。ios-Facebook SDK 3.0錯誤5當發佈狀態更新

(void)viewDidLoad 
{ 
[super viewDidLoad]; 
NSArray *perms; 
perms = [NSArray arrayWithObjects:@"status_update", nil]; 
FBLoginView *loginview = 
[[FBLoginView alloc] initWithPermissions:perms]; 

loginview.frame = CGRectOffset(loginview.frame, 5, 5); 
loginview.delegate = self; 

[self.view addSubview:loginview]; 
// Do any additional setup after loading the view, typically from a nib. 

} 

- (IBAction)poststatus:(UIButton *)sender { 
NSString *message = [NSString stringWithFormat:@"Test staus update"]; 

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

           [self showAlert:message result:result error:error]; 

          }]; 
} 
- (void)showAlert:(NSString *)message 
     result:(id)result 
     error:(NSError *)error { 

NSString *alertMsg; 
NSString *alertTitle; 
if (error) { 
    alertMsg = error.localizedDescription; 
    alertTitle = @"Error"; 
} else { 
    NSDictionary *resultDict = (NSDictionary *)result; 
    alertMsg = [NSString stringWithFormat:@"Successfully posted '%@'.\nPost ID: %@", 
       message, [resultDict valueForKey:@"id"]]; 
    alertTitle = @"Success"; 
} 

UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:alertTitle 
                message:alertMsg 
                delegate:nil 
              cancelButtonTitle:@"OK" 
              otherButtonTitles:nil]; 
[alertView show]; 
} 

奇怪的是,這段代碼工作一次。第一次驗證用戶身份後,我可以成功發佈ONE狀態更新。之後,所有後續嘗試將失敗並出現FBiOSSDK錯誤5(在控制檯中,錯誤:HTTP狀態碼:400)。解決此問題的唯一方法是從Facebook帳戶中刪除應用程序並重新進行身份驗證。我不確定問題是什麼。我在網上尋找解決方案,但找不到任何東西。如果有人知道如何解決這個問題,請告訴我。謝謝

+0

得到了相同的代碼。帶着改變的app_id玩弄美味的Facebook示例項目。也許它是相關的... – Centurion 2012-08-14 06:45:57

+1

我相信這個問題是由於某種原因,你不能在一段時間內發佈一次相同的狀態更新。如果您嘗試發佈相同的狀態更新,請嘗試在每個帖子後更改它 – benjih555 2012-08-14 17:15:15

+1

發現問題。在返回的NSError的userInfo中有響應消息「Feed action request limit reached」。進一步挖掘... – Centurion 2012-08-22 09:25:07

回答

7

看來可能沒有問題的答案。我已經檢查過使用SDK的FB示例,在這些示例中也發生了相同的錯誤。所以這意味着經過少量狀態更新(15-20)Facebook達到了特定用戶的限制。如果您註銷該用戶並以其他用戶身份登錄,則可以成功發佈。

如果我會找到任何擴展來限制設置,我會回覆。 也Facebook不允許相同的職位。

+0

這似乎是這樣的... Facebook應該記錄這些限制.. – benjih555 2012-10-09 18:24:03

+0

這是真的......但我們不能爭辯.. :) – 2012-10-11 10:09:32

10

com.facebook.sdk錯誤5在使用Facebook iOS sdk時總是令人煩惱。大多數情況下,它在控制檯中添加附加錯誤:HTTP狀態碼:400。它認爲Facebook iOS sdk中存在一個隨機產生此錯誤的錯誤。我認爲這個錯誤是由於某些原因而發生的,當它發生時,sdk並沒有提供錯誤的實際原因。

幾個可能的原因

  • 在SDK的每個請求與完成塊,我們實際上是通過在completionHandler參數來實現的。塊正在進行併發出另一個請求時會發生此錯誤。一個簡單的例子可能是如果你已經寫了一些在Facebook上發佈的請求(startForPostStatusUpdate :):在某些按鈕操作上。單擊按鈕時,它會正常工作,但如果你雙擊按鈕它會拋出這個錯誤com.facebook.sdk錯誤5

  • 如果你正試圖發佈當你的當前會話沒有打開。例如一旦用Facebook登錄,然後殺了應用程序,然後重新打開,然後嘗試分享Facebook上,結果 - > com.facebook.sdk錯誤5.在這種情況下嘗試重新打開會話使用

  • Facebook不允許相同的狀態被重複發佈,他們認爲這可能是某種垃圾郵件,例如如果您嘗試更新狀態並且硬編碼了字符串,則可以說@「這是一個測試狀態更新」,您一次又一次地冒充。經過5到10次嘗試後,他們不會再讓你做。造成com.facebook.sdk錯誤5.如果是這種情況,您應該更改狀態字符串並嘗試更新。

  • Facebook爲特定用戶定義了使用sdk發佈狀態的限制。例如,如果您嘗試更新狀態,並且已經完成了15到20個狀態更新。他們不會讓你做更多的所得 - > com.facebook.sdk錯誤5.在這種情況下嘗試從您的Facebook帳戶取消授權的應用程序,並重新授權,或嘗試使用其他Facebook帳戶

0

使用代理!

FB IOS SDK只是換到一個HTTP請求graph.facebook.com/....?=的access_token .....

所以,你可以很容易地複製請求或使用HTTP代理看到真實的服務器答案(這不是錯誤5!)。