我正在嘗試根據本指南https://firebase.google.com/docs/database/server/start並使用Play Framework + Scala在Firebase上編寫一些數據。Firebase Java SDK不會保留數據,也不會觸發回調。任務似乎從未完成
調用DatabaseReference.setValue後沒有任何反應:數據未保留在Firebase上,我的回調未觸發。
下面的代碼:
lazy val conf = ConfigFactory.load()
lazy val options = new FirebaseOptions.Builder()
.setCredential(FirebaseCredentials.fromCertificate(new FileInputStream(conf.getString("firebase.credentials.path"))))
.setDatabaseUrl("https://orsz-xxxxx-xxxxx.firebaseio.com/")
.build()
lazy val propsDB = FirebaseDatabase.getInstance().getReference()
/** Initialize block to instantiates FirebaseApp **/
{
println("[FirebasePersistence] - Initialize FirebaseApp")
FirebaseApp.initializeApp(options)
FirebaseDatabase.getInstance().setLogLevel(Logger.Level.DEBUG)
println("[FirebasePersistence] - Initialize FirebaseApp Done!")
}
def persistProposition(prop: Proposition): Future[Proposition] = Future {
val task = propsDB.setValue(1, new DatabaseReference.CompletionListener() {
override def onComplete(databaseError: DatabaseError, databaseReference: DatabaseReference) {
if (databaseError != null) {
println("Error: " + databaseError.getMessage)
} else {
println("[FirebasePersistence.persistProposition] - OK")
}
}
})
prop
}
我可以看到,測試SBT控制檯上,上的setValue生成的任務無法完成,即使秒後:
scala> task.isComplete
res6: Boolean = false
與火力地堡日誌級別DEBUG我執行得到這個日誌:
Thu Apr 06 08:53:37 BRT 2017 [DEBUG] PersistentConnection: pc_0 - Trying to fetch auth token
Thu Apr 06 08:53:37 BRT 2017 [DEBUG] RepoOperation: set:/
Thu Apr 06 08:53:37 BRT 2017 [DEBUG] DataOperation: set:/1
Thu Apr 06 08:53:37 BRT 2017 [DEBUG] RepoOperation: Aborting transactions for path: /. Affected:/
Thu Apr 06 08:53:38 BRT 2017 [DEBUG] PersistentConnection: pc_0 - Successfully fetched token, opening connection
Thu Apr 06 08:53:38 BRT 2017 [DEBUG] Connection: conn_0 - Opening a connection
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] WebSocket: ws_0 - websocket opened
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] WebSocket: ws_0 - Reset keepAlive
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] WebSocket: ws_0 - ws message: {"t":"c","d":{"t":"h","d":{"ts":1491479619239,"v":"5","h":"s-usc1c-nss-135.firebaseio.com","s":"bxE2HQCxtNNs4EznaO5xjWsInnIpu5Fi"}}}
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] WebSocket: ws_0 - Reset keepAlive. Remaining: 44991
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] WebSocket: ws_0 - HandleNewFrameCount: 1
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] WebSocket: ws_0 - handleIncomingFrame complete frame: {t=c, d={t=h, d={h=s-usc1c-nss-135.firebaseio.com, s=bxE2HQCxtNNs4EznaO5xjWsInnIpu5Fi, v=5, ts=1491479619239}}}
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] Connection: conn_0 - Got control message: {t=h, d={h=s-usc1c-nss-135.firebaseio.com, s=bxE2HQCxtNNs4EznaO5xjWsInnIpu5Fi, v=5, ts=1491479619239}}
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] Connection: conn_0 - realtime connection established
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] PersistentConnection: pc_0 - onReady
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] PersistentConnection: pc_0 - handling timestamp
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] PersistentConnection: pc_0 - Sending first connection stats
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] Connection: conn_0 - Sending data: {t=d, d={a=s, r=0, b={c={sdk.java.3-0-0=1}}}}
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] WebSocket: ws_0 - Reset keepAlive. Remaining: 44993
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] PersistentConnection: pc_0 - calling restore state
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] PersistentConnection: pc_0 - Restoring auth.
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] Connection: conn_0 - Sending data (contents hidden)
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] WebSocket: ws_0 - Reset keepAlive. Remaining: 44996
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] WebSocket: ws_0 - ws message: {"t":"d","d":{"r":0,"b":{"s":"ok","d":""}}}
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] WebSocket: ws_0 - Reset keepAlive. Remaining: 44836
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] WebSocket: ws_0 - HandleNewFrameCount: 1
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] WebSocket: ws_0 - handleIncomingFrame complete frame: {t=d, d={r=0, b={d=, s=ok}}}
Thu Apr 06 08:53:39 BRT 2017 [DEBUG] Connection: conn_0 - received data message: {r=0, b={d=, s=ok}}
Thu Apr 06 08:53:40 BRT 2017 [DEBUG] WebSocket: ws_0 - ws message: {"t":"d","d":{"r":1,"b":{"s":"permission_denied","d":"Access denied."}}}
Thu Apr 06 08:53:40 BRT 2017 [DEBUG] WebSocket: ws_0 - Reset keepAlive. Remaining: 43628
Thu Apr 06 08:53:40 BRT 2017 [DEBUG] WebSocket: ws_0 - HandleNewFrameCount: 1
Thu Apr 06 08:53:40 BRT 2017 [DEBUG] WebSocket: ws_0 - handleIncomingFrame complete frame: {t=d, d={r=1, b={d=Access denied., s=permission_denied}}}
Thu Apr 06 08:53:40 BRT 2017 [DEBUG] Connection: conn_0 - received data message: {r=1, b={d=Access denied., s=permission_denied}}
Thu Apr 06 08:53:40 BRT 2017 [DEBUG] PersistentConnection: pc_0 - Authentication failed: permission_denied (Access denied.)
Thu Apr 06 08:53:40 BRT 2017 [DEBUG] Connection: conn_0 - closing realtime connection
Thu Apr 06 08:53:40 BRT 2017 [DEBUG] WebSocket: ws_0 - websocket is being closed
Thu Apr 06 08:53:40 BRT 2017 [DEBUG] PersistentConnection: pc_0 - Got on disconnect due to OTHER
Thu Apr 06 08:53:40 BRT 2017 [DEBUG] PersistentConnection: pc_0 - Scheduling connection attempt
Thu Apr 06 08:53:40 BRT 2017 [DEBUG] ConnectionRetryHelper: Scheduling retry in 821ms
Thu Apr 06 08:53:41 BRT 2017 [DEBUG] WebSocket: ws_0 - closed
Thu Apr 06 08:53:41 BRT 2017 [DEBUG] PersistentConnection: pc_0 - Trying to fetch auth token
Thu Apr 06 08:53:41 BRT 2017 [DEBUG] PersistentConnection: pc_0 - Successfully fetched token, opening connection
我可以看到一些權限拒絕日誌,但可以'弄清楚爲什麼。
我已經在FileInputStream上測試憑據,它是可以的。
在火力地堡項目的權限:
{
"rules": {
".read": "true",
".write": "true"
}
}
我已經測試使用火力管理員-4.1.6和火力服務器-SDK-3.0.1,並有同樣的結果
編輯: 我在調用setValue之前打印了FirebaseApp,FirebaseDatabase和DatabaseReference對象,並獲得了上面的代碼。 我如何確保admin sdk被正確初始化?
FirebaseApp=FirebaseApp{name=[DEFAULT], options=FirebaseOptions{databaseUrl=https://orsz-xxxxx-xxxxx.firebaseio.com/, credent[email protected]558b77e8, databaseAuthVariableOverride={}}}
FirebaseApp.name=[DEFAULT]
FirebaseDatabase.getInstance()[email protected]
DatabaseReference=https://orsz-xxxxx-xxxxx.firebaseio.com/12345
看到我下面的後續。不是一個真正的答案,但太長的評論。 –