2012-11-01 37 views
5

我的應用程序具有在服務器上發送一些內容並(需要)在Facebook上發佈內容的功能。它使用服務進行發送(對於存儲數據,我使用sqlite)。是否有可能從服務處理facebook會話e.t.c?我需要它,因爲時間內容將被存儲在數據庫中,並且發送時間可能不同(可能連接將在很長時間內丟失並且在連接可用後開始發送,但是隻有發送服務的應用程序在此處處於活動狀態時間)。我找不到這種情況下的任何解決方案(好的解決方案會很棒)。請幫忙。使用來自服務的Facebook android sdk

回答

4

用戶必須明確授予應用程序權限,並且Android服務不支持Activity.startActivityForResult(),因此無法通過服務重新授權來打開會話或添加新權限。

但是,如果您在應用程序的其中一個活動中打開/重新授權會話,則默認情況下會話的狀態將保存到SharedPreferences。如果一個服務在發生這種情況後創建一個Session,它將在SessionState.CREATED_TOKEN_LOADED中結束。如果Session.getState()爲CREATED_TOKEN_LOADED,則會話保證能夠在沒有UI的情況下使用openForRead(),並且傳遞空Activity是合法的。會話將擁有由您的活動保存的所有授予的權限。

爲了簡化這一切,你的服務可以叫:

Session session = Session.openActiveSession(this); 

該調用返回null,如果沒有有效的標記是SharedPreferences。

如果您的應用UI有一個設置區域,首先獲取令牌的簡單方法是將LoginFragment作爲其中一個設置面板。這可以讓你的用戶登錄/註銷,並且應該保存會話狀態,以便你的服務可以在同一個應用中使用它。

相關問題