2012-10-12 28 views
3

我正在構建一個原生iOS應用程序,該應用程序將允許用戶登錄到Facebook和「喜歡」Open Graph對象。我正在爲我的代碼編寫單元測試,這些代碼都是內置的。我在Facebook應用的管理員網頁中創建了測試用戶,我想在單元測試中做的是以測試用戶的身份登錄,比如「開放圖形對象」,檢查以確保「喜歡」的數量'改變了,然後'不像'它。如何使用FBTestSession

我使用的是Facebook iOS SDK,它帶有FBTestSession,我認爲這對我的需求來說是完美的。我的理解是,它會隨機抓取一個測試用戶來登錄(或者如果您願意,可以創建一個臨時的)。然而,有幾個問題,我沒有看到任何文件解釋它。

第一個問題:它試圖從Documents目錄加載FacebookSDK-UnitTestConfig.plist來讀取AppID和AppSecret。爲了解決這個問題,我製作了這樣一個文件,並在測試開始時將它複製到Documents目錄中。這是正確的事情嗎?

第二個問題是,當我嘗試打開測試會話時出現錯誤,並顯示400響應代碼並且沒有有用的消息。看看它試圖做出的請求,似乎它使用fql來查詢所有測試帳戶。當我在Web瀏覽器

https://graph.facebook.com/fql?access_token=ACCESS_TOKEN&q=SELECT id,access_token FROM test_account WHERE app_id = APP_ID)

輸入相應的URL,我得到錯誤信息「(#15)不支持本地應用這種方法」。但很明顯,FBTestSession適用於本機應用程序,那麼發生了什麼?

回答

0

只要它是真實的,因此不存在安全風險,以你的應用程序,在客戶端的Facebook應用程序,以沒有改變應用程式密鑰在高級設置值。這應該讓你使用你的應用程序訪問令牌來提出測試用戶信息的請求。

如果您的應用程序確實在分佈式本機代碼中包含了應用程序密鑰,則可能會發現它,並因此導致您的應用程序的安全性受損。我認爲這就是爲什麼FB在默認情況下切換此設置的原因。

1

使用FBTestSession很簡單,它會在打開時創建一個測試用戶,並在關閉時將其銷燬。後,您可以使用您的會話像一個典型的會話(內部FBTestSession從FBSession繼承):

FBSession *fbSession = [FBTestSession sessionWithPrivateUserWithPermissions:@[@"publish_stream", @"email"]]; 
[fbSession openWithCompletionHandler:^(FBSession *session, FBSessionState status, NSError *error) { 
    // Test here, you can use the session.accessToken attribute 
} 

我得到了一些麻煩與FacebookSDK-UnitTestConfig.plist,我覺得有東西在Facebook的SDK怪異,我看着代碼和建立他們正在尋找的文件目錄的路徑,這樣的plist:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *configFilename = [documentsDirectory stringByAppendingPathComponent:@"FacebookSDK-UnitTestConfig.plist"]; 

測試時,該文件目錄是不一樣的,當我們在模擬器中運行的應用程序,我打印出來,它是:

/Users/{user}/Library/Application Support/iPhone Simulator/{iOS_version}/Documents/ 

如果你把你的plist那裏應該工作。您的plist文件具有字典結構幷包含2個鍵:FacebookAppIDFacebookAppSecret