Firebase 为什么拒绝我将FCM令牌数据存储到Cloud Firestore?

Firebase 为什么拒绝我将FCM令牌数据存储到Cloud Firestore?,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,错误: 颤振代码: W/Firestore(24623): (21.6.0) [WriteStream]: (798288) Stream closed with status: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}. W/Firestore(24623): (21.6.0) [Firestore]: Write failed at deviceto

错误:

颤振代码:

W/Firestore(24623): (21.6.0) [WriteStream]: (798288) Stream closed with status: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}.
W/Firestore(24623): (21.6.0) [Firestore]: Write failed at devicetokens/cIvW6DrG5xnxJOhndbyq: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}
E/flutter (24623): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: [cloud_firestore/permission-denied] The caller does not have permission to execute the specified operation.
规则:

      _fcm.getToken().then((deviceToken){
        FirebaseFirestore.instance.collection("devicetokens").add({
          'createdAt': DateTime.now(),
          'platform' : Platform.isIOS ? "iOS" : "Android",
          'token': deviceToken
        });
      });
使用上述代码集,我的目标是检索FCM令牌并将其存储在Firestore中。我记得以前使用过这种语法,它在那时就起作用了,但自从8月份的更新以来,它似乎没有按预期的那样起作用

编辑:-FWIW,我在我的使用选项卡中得到了非零读取计数,即使我根本没有从Firestore读取

EDIT2:-尝试了启动中提供的常规测试条件,但仍然失败

EDIT3:-发布完整的错误日志,以防有人知道发生了什么:

rules_version = '2';
service cloud.firestore {   
    match /databases/{database}/documents {
    match /devicetokens/{document=**} {
      allow read: if false;
      allow write: if true; 
    }
  }
}
E/flatter(1788):#0 catchPlatformException(包:cloud\u firestore\u platform\u interface/src/method\u channel/utils/exception.dart:17:3)
E/flatter(1788):#1 rootrunary(dart:async/zone.dart:1198:47)
E/flatter(1788):#2 _CustomZone.runUnary(dart:async/zone.dart:1100:19)
E/flatter(1788):#3 FutureListener.handleError(dart:async/future_impl.dart:160:20)
E/flatter(1788):#4 Future._-propagateToListeners.handleError(dart:async/Future_-impl.dart:708:47)
E/flatter(1788):#5未来。#传播给监听器(dart:async/Future#impl.dart:729:24)
E/颤振(1788):#6未来。_完全错误(dart:async/Future\u impl.dart:537:5)
E/flatter(1788):#7#asyncwaitcompleter.completeError(dart:async patch/async#patch.dart:47:15)
E/flatter(1788):#8方法通道。_调用方法(包:flatter/src/services/platform#u通道.dart)
E/颤振(1788):
E/flatter(1788):#9 MethodChannel.invokeMethod(包:flatter/src/services/platform_channel.dart:334:12)
E/flatter(1788):#10 MethodChannelDocumentReference.set(包:cloud_firestore_platform_interface/src/method_channel/method_channel_document_reference.dart:29:51)
E/flatter(1788):#11 DocumentReference.set(包:cloud_firestore/src/document_reference.dart:82:22)
E/flatter(1788):#12 CollectionReference.add(包装:cloud_firestore/src/collection_reference.dart:45:23)
E/颤振(1788):#13#u SlideDrawerState.startTime。(软件包:nawa/widgets/innerdrawer.dart:132:63)
E/flatter(1788):#14 rootrunary(dart:async/zone.dart:1198:47)
E/flatter(1788):#15_CustomZone.runUnary(dart:async/zone.dart:1100:19)
E/flatter(1788):#16 FutureListener.handleValue(dart:async/future_impl.dart:143:18)
E/flatter(1788):#17 Future._-propagateToListeners.handleValueCallback(dart:async/Future_-impl.dart:696:45)
E/flatter(1788):#18未来。#传播给监听器(dart:async/Future\u impl.dart:725:32)
E/flatter(1788):#19 Future._completewith value(dart:async/Future_impl.dart:529:5)
E/flatter(1788):#20 AsyncAwaitCompleter.complete(dart:async patch/async patch.dart:40:15)
E/Flatter(1788):#21完成同步返回(dart:async patch/async patch.dart:311:13)
E/flatter(1788):#22 firebasemessage.getToken(包:firebase_messaging/firebase_messaging.dart)
E/flatter(1788):23根一元(dart:async/zone.dart:1198:47)
E/flatter(1788):#24 _CustomZone.runUnary(dart:async/zone.dart:1100:19)
E/flatter(1788):#25 FutureListener.handleValue(dart:async/future_impl.dart:143:18)
E/flatter(1788):#26 Future._propagateToListeners.handleValueCallback(dart:async/Future_impl.dart:696:45)
E/flatter(1788):#27未来。#传播给监听器(dart:async/Future\u impl.dart:725:32)
E/flatter(1788):#28 Future._completewith value(dart:async/Future_impl.dart:529:5)
E/flatter(1788):#29 AsyncAwaitCompleter.complete(dart:async patch/async patch.dart:40:15)
E/Flatter(1788):#30完成同步返回(dart:async patch/async patch.dart:311:13)
E/flatter(1788):#31方法通道。_调用方法(包:flatter/src/services/platform#u通道.dart)
E/flatter(1788):#32 rootrunary(dart:async/zone.dart:1198:47)
E/flatter(1788):#33 _CustomZone.runUnary(dart:async/zone.dart:1100:19)
E/flatter(1788):#34 FutureListener.handleValue(dart:async/future_impl.dart:143:18)
E/flatter(1788):#35 Future._propagateToListeners.handleValueCallback(dart:async/Future_impl.dart:696:45)
E/flatter(1788):#36未来。#传播给监听器(dart:async/Future\u impl.dart:725:32)
E/flatter(1788):#37 Future._completewith value(dart:async/Future_impl.dart:529:5)
E/Flatter(1788):#38未来。#U异步完成价值。(dart:async/future\u impl.dart:567:7)
E/flatter(1788):#39_rootRun(dart:async/zone.dart:1190:13)
E/flatter(1788):#40 _CustomZone.run(dart:async/zone.dart:1093:19)
E/flatter(1788):#41 _CustomZone.runguard(dart:async/zone.dart:997:7)
E/颤振(1788):#42_CustomZone.bindCallbackguared。(dart:async/zone.dart:1037:23)
E/flatter(1788):#43 microtaskLoop(dart:async/schedule_microtask.dart:41:21)
E/Flatter(1788):#44 startMicrotaskLoop(dart:async/schedule_microtask.dart:50:5)
我会尝试以下方法:

E/flutter ( 1788): #0      catchPlatformException (package:cloud_firestore_platform_interface/src/method_channel/utils/exception.dart:17:3)
E/flutter ( 1788): #1      _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter ( 1788): #2      _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 1788): #3      _FutureListener.handleError (dart:async/future_impl.dart:160:20)
E/flutter ( 1788): #4      Future._propagateToListeners.handleError (dart:async/future_impl.dart:708:47)
E/flutter ( 1788): #5      Future._propagateToListeners (dart:async/future_impl.dart:729:24)
E/flutter ( 1788): #6      Future._completeError (dart:async/future_impl.dart:537:5)
E/flutter ( 1788): #7      _AsyncAwaitCompleter.completeError (dart:async-patch/async_patch.dart:47:15)
E/flutter ( 1788): #8      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart)
E/flutter ( 1788): <asynchronous suspension>
E/flutter ( 1788): #9      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:334:12)
E/flutter ( 1788): #10     MethodChannelDocumentReference.set (package:cloud_firestore_platform_interface/src/method_channel/method_channel_document_reference.dart:29:51)
E/flutter ( 1788): #11     DocumentReference.set (package:cloud_firestore/src/document_reference.dart:82:22)
E/flutter ( 1788): #12     CollectionReference.add (package:cloud_firestore/src/collection_reference.dart:45:23)
E/flutter ( 1788): #13     _SlideDrawerState.startTime.<anonymous closure> (package:nawa/widgets/innerdrawer.dart:132:63)
E/flutter ( 1788): #14     _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter ( 1788): #15     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 1788): #16     _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
E/flutter ( 1788): #17     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
E/flutter ( 1788): #18     Future._propagateToListeners (dart:async/future_impl.dart:725:32)
E/flutter ( 1788): #19     Future._completeWithValue (dart:async/future_impl.dart:529:5)
E/flutter ( 1788): #20     _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:40:15)
E/flutter ( 1788): #21     _completeOnAsyncReturn (dart:async-patch/async_patch.dart:311:13)
E/flutter ( 1788): #22     FirebaseMessaging.getToken (package:firebase_messaging/firebase_messaging.dart)
E/flutter ( 1788): #23     _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter ( 1788): #24     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 1788): #25     _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
E/flutter ( 1788): #26     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
E/flutter ( 1788): #27     Future._propagateToListeners (dart:async/future_impl.dart:725:32)
E/flutter ( 1788): #28     Future._completeWithValue (dart:async/future_impl.dart:529:5)
E/flutter ( 1788): #29     _AsyncAwaitCompleter.complete (dart:async-patch/async_patch.dart:40:15)
E/flutter ( 1788): #30     _completeOnAsyncReturn (dart:async-patch/async_patch.dart:311:13)
E/flutter ( 1788): #31     MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart)
E/flutter ( 1788): #32     _rootRunUnary (dart:async/zone.dart:1198:47)
E/flutter ( 1788): #33     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter ( 1788): #34     _FutureListener.handleValue (dart:async/future_impl.dart:143:18)
E/flutter ( 1788): #35     Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:696:45)
E/flutter ( 1788): #36     Future._propagateToListeners (dart:async/future_impl.dart:725:32)
E/flutter ( 1788): #37     Future._completeWithValue (dart:async/future_impl.dart:529:5)
E/flutter ( 1788): #38     Future._asyncCompleteWithValue.<anonymous closure> (dart:async/future_impl.dart:567:7)
E/flutter ( 1788): #39     _rootRun (dart:async/zone.dart:1190:13)
E/flutter ( 1788): #40     _CustomZone.run (dart:async/zone.dart:1093:19)
E/flutter ( 1788): #41     _CustomZone.runGuarded (dart:async/zone.dart:997:7)
E/flutter ( 1788): #42     _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1037:23)
E/flutter ( 1788): #43     _microtaskLoop (dart:async/schedule_microtask.dart:41:21)
E/flutter ( 1788): #44     _startMicrotaskLoop (dart:async/schedule_microtask.dart:50:5)

我不确定你的语法是否正确。此外,如果文档收集路径没有为其设置规则,并且您的数据库未处于测试模式(即您可以读取/写入任何路径),则操作将失败,并出现该
权限被拒绝的
错误

rules_version = '2';
service cloud.firestore {   
    match /databases/{database}/documents {
      match /devicetokens/{deviceTokenId} {
        allow read: if false;
        allow write: if true; 
      }
    }
}
通配符用
{}
表示,而不是像下面那样用
=**
表示

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
     match /devicetokens/{deviceTokenId}  {
      allow read;
      allow write;
    }
  }
}
如果所有其他操作都失败,请使用以下代码段覆盖所有规则:

match /devicetokens/{document=**} {
  allow read: if false;
  allow write: if true; 
}
rules_version='2';
服务云.firestore{
匹配/databases/{database}/documents{
匹配/{document=**}{
允许读、写:如果
request.time

它将所有内容都置于测试模式(从任何内容读取/写入任何内容)。如果您的错误仍然存在,那么肯定是其他地方的问题

您所说的“8月更新”是什么意思?8月中旬是否有大量Firebase产品的更新?还是仅仅是F
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if
          request.time < timestamp.date(2020, 10, 01); //Allow only until the 1st of October
    }
  }
}