2012-09-27 124 views
1

使用Facebook SDK 3.1我希望在發送發佈請求之前,應用程序擁有「publish_stream」權限。FBSession的Facebook SDK 3.0權限數組擁有錯誤的權限

問題是[FBSession.activeSession.permissions indexOfObject:@「publish_stream」]永遠不會返回NSNotFound,即使用戶在登錄期間選擇不允許任何內容。由於我假設我有權發送帖子但它返回HTTP狀態碼403,因爲我實際上沒有所需的權利。

IS是一個錯誤,或者有另一種方法來檢查活動會話的權限。

回答

0

Facebook上證實,它在iOS的SDK中的錯誤的訪問令牌相關聯的所有權限:https://developers.facebook.com/bugs/111727002307769

的錯誤仍然仍在iOS SDK 3.1中

解決方法是使用API​​調用/me/permissions來檢查許可,如Igy提出的。

+0

謝謝你,我依賴於/我/權限的結果,但是每次你想發佈帖子或者其他東西時,發送和請求請求並不高雅。用戶可以在允許一次後改變給定的權限。 –

+0

我同意。一個稍微不同的方法是爲#200錯誤添加處理程序(需要擴展權限),而不是每次發送/ me/permissions請求。不是很優雅,但它畢竟是一個錯誤的解決方法。 –

1

如果您的API調用/me/permissions當前與您正在使用將返回

+0

在這種情況下,FBSession.activeSession.permissions會返回我請求的權限列表,但會話啓動時它不會更新。 –

0
[FBSession.activeSession.permissions indexOfObject:@"publish_stream"] != NSNotFound 

上面的代碼不是檢查寫入權限的正確方法。

取而代之的是,請嘗試以下方法:

-(BOOL)hasWritePermissions{ 

    NSArray *permissiones = [FBSession activeSession].permissions; 
    for (NSString *permission in permissiones) { 

     if ([permission isEqualToString:@"publish_actions"]) { 
      return YES; 
     } 
    } 

    return NO; 
} 
+1

您可以簡化爲'[[FBSession activeSession] .permissions containsObject:@「publish_actions」]',但問題的根源在於權限列表被緩存。 – Zorayr

0

正如@Zorayr說你可以做如下。

NSArray *permissions = FBSession.activeSession.permissions; 
    if ([permissions containsObject:@"publish_actions"]) { 
     [self performNextTestWithLastPostID:nil]; 
    } else { 
     ... 
}