firebase - Firebase - 请求权限为空
问题描述
我有一个带有 Firebase 通知的颤振应用程序。当应用程序运行时,firebase 会尝试获取令牌,如下所示。
import 'dart:io';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:pushtest/functions/alert_messages.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:pushtest/constant/constant.dart' as Constants;
class PushNotifications {
FirebaseMessaging firebaseMessaging;
initNotifications() {
firebaseMessaging.requestPermission(); // ERROR
firebaseMessaging.getToken().then((token) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('firebaseToken', token);
});
}
configuration(scaffold, location) {
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
var noti;
if (Platform.isIOS) {
noti = message.data['message'];
} else {
noti = message.data['data']['message'];
}
if (location == 'navigation') {
Messages.alert(scaffold.currentContext, noti);
} else {
Constants.message = noti;
}
return null;
});
FirebaseMessaging.onBackgroundMessage((message) {
var noti;
if (Platform.isIOS) {
noti = message.data['message'];
} else {
noti = message.data['data']['message'];
}
if (location == 'navigation') {
Messages.alert(scaffold.currentContext, noti);
} else {
Constants.message = noti;
}
return null;
});
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
var noti;
if (Platform.isIOS) {
noti = message.data['message'];
} else {
noti = message.data['data']['message'];
}
Constants.message = noti;
return null;
});
}
}
但是返回
在 null 上调用了方法“requestPermission”。接收方:null 尝试调用:requestPermission()
我使用 firebase_messaging 10.0。那么,这样做的正确方法是什么?
解决方案
在 null 上调用了方法“requestPermission”。接收方:null 尝试调用:requestPermission()
这个错误意味着变量firebaseMessaging
是null
. 这是因为它只是被声明但没有分配给它的值,如下所示:
FirebaseMessaging firebaseMessaging;
您可以将此行更新为:
FirebaseMessaging firebaseMessaging = FirebaseMessaging.instance;
推荐阅读
- typescript - TypeScript webpack 构建不包括 node_modules
- git - 在 .git/* 上执行 dos2unix 后损坏的 git repo
- php - Symfony 4 单一形式的多个实体
- c++ - 构造函数的参数包类型不适用于vector.emplace_back
- python - 如何使用数据库中的文本作为用户名和密码进行身份验证?
- neo4j - 如何在 Neo4j DB 中找到小于最大值的所有路径?
- c# - 在加载对话框时在后台从数据库中检索数据
- swift - 在 facebook 上分享分享对话框
- angular - 将Routerlink传递给子组件
- jenkins - 詹金斯根据参数发送电子邮件通过/失败更改