Firebase iOS SDKを使用しています。私のアプリ体験の一部はグループチャットです。私は、各グループチャットのためのクラスを持っているし、次のようにfirebaseオブジェクトへの参照を格納します。Firebase iOSがJWTで再認証した後でイベントを受信しない
self.firebaseMessages = [[Firebase alloc] initWithUrl:[NSString stringWithFormat:@"%@/Message/%@", FIREBASE_URL, chat.objectId]];
私はその後、私が興味各イベントを観察し、これは非常にうまく機能します。 JWTでカスタム認証を使用しています。私の問題は、トークンが期限切れになるか、ユーザーがログアウトして再認証したときです。その時点で、アプリケーションを完全に再起動しない限り、私が観察しているイベントのコールバックは停止します。 AuthEventWithBlockで成功のコールバックとauthdataを取得したので、再認証が成功したことがわかります。値を設定すると、データベースの更新と他のクライアントは更新を受け取ります。それは、もはや更新を受け取らない再認証されたクライアントだけです。
私は可能性としてそれを排除するために、私のセキュリティルールをダウン易しく書き直さました:私は上で再認証を試してみた
Firebase *ref = [[Firebase alloc] initWithUrl:FIREBASE_URL];
[ref authWithCustomToken:responseObject[@"auth_token"] withCompletionBlock:^(NSError *error, FAuthData *authData) {
:ルートURLに私は再認証
"Message": {
"$message": {
".read": "auth != null",
".write": "auth != null"
}
}
各メッセージのURL Firebaseオブジェクトのすべてを再インスタンス化しようとしました。
また、ユーザーをログアウトしてトークンの有効期限をシミュレートするために、ルートで[ref unauth]を使用しています。
私には何が欠けていますか?
私はあなたのリスナーが認証の喪失後にキャンセルされていると思います(このような短い量のコードでこれを確認することは不可能です)。これを確認するには、キャンセルブロックを追加し、発生したキャンセルエラーをログに記録します。再認証後にリスナーを再確立する必要があります。 – Kato
認証が失われたときにリスナーがキャンセルされた場合は、意味があります。私はそれを認識しませんでした。 Firebaseオブジェクトを再インスタンス化すると、明らかに離れてしまうので、それは私の上のサイトです。私はリスナーを再構築して問題を解決できると確信しているので、私はそれを撃つだろう。ありがとう。 – Londo