Gab*_*van 77 firebase flutter firebase-cloud-messaging flutter-dependencies
一旦我将 flutter 更新到 1.12.13 版,我就发现了这个问题并且无法修复它。我按照firebase_messaging教程发送的,得到以下错误:“错误:类型不兼容:PluginRegistry无法转换为FlutterEngine GeneratedPluginRegistrant.registerWith(registry);”我的代码如下:
package io.flutter.plugins;
import io.flutter.app.FlutterApplication;
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback;
import io.flutter.plugins.GeneratedPluginRegistrant;
import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.os.Build;
public class Application extends FlutterApplication implements PluginRegistrantCallback {
@Override
public void onCreate() {
super.onCreate();
FlutterFirebaseMessagingService.setPluginRegistrant(this);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
NotificationChannel channel = new NotificationChannel("messages","Messages", NotificationManager.IMPORTANCE_LOW);
NotificationManager manager = getSystemService(NotificationManager.class);
manager.createNotificationChannel(channel);
}
}
@Override
public void registerWith(PluginRegistry registry) {
GeneratedPluginRegistrant.registerWith(registry);
}
}
Run Code Online (Sandbox Code Playgroud)
meh*_*afi 111
替换此代码行:
GeneratedPluginRegistrant.registerWith(registry);
Run Code Online (Sandbox Code Playgroud)
有了这个:
FirebaseMessagingPlugin.registerWith(registry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
Run Code Online (Sandbox Code Playgroud)
确保导入:
import io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin;
Run Code Online (Sandbox Code Playgroud)
Dom*_*oMG 36
2019 年 12 月 31 日更新。
您不应使用 Firebase 云消息传递工具发送通知,因为它会强制您使用标题和正文。
您必须发送没有标题和正文的通知。在后台运行应用程序,这应该适合您。
如果它对你有用,如果你能给我这个答案投票,我将不胜感激,谢谢。
我找到了一个临时解决方案。我不确定这是最好的解决方法,但我的插件按预期工作,我认为问题必须出在 io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService 在第 164 行提供的注册表中。
我的 AndroidManifest.xml 文件:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="Your Package"> // CHANGE THIS
<application
android:name=".Application"
android:label="" // YOUR NAME APP
android:icon="@mipmap/ic_launcher">
<activity
android:name=".MainActivity"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<!-- BEGIN: Firebase Cloud Messaging -->
<intent-filter>
<action android:name="FLUTTER_NOTIFICATION_CLICK" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<!-- END: Firebase Cloud Messaging -->
</activity>
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
我的应用程序.java
package YOUR PACKAGE HERE;
import io.flutter.app.FlutterApplication;
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback;
import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService;
public class Application extends FlutterApplication implements PluginRegistrantCallback {
@Override
public void onCreate() {
super.onCreate();
FlutterFirebaseMessagingService.setPluginRegistrant(this);
}
@Override
public void registerWith(PluginRegistry registry) {
FirebaseCloudMessagingPluginRegistrant.registerWith(registry);
}
}
Run Code Online (Sandbox Code Playgroud)
我的 FirebaseCloudMessagingPluginRegistrant.java
package YOUR PACKAGE HERE;
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin;
public final class FirebaseCloudMessagingPluginRegistrant{
public static void registerWith(PluginRegistry registry) {
if (alreadyRegisteredWith(registry)) {
return;
}
FirebaseMessagingPlugin.registerWith(registry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
}
private static boolean alreadyRegisteredWith(PluginRegistry registry) {
final String key = FirebaseCloudMessagingPluginRegistrant.class.getCanonicalName();
if (registry.hasPlugin(key)) {
return true;
}
registry.registrarFor(key);
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
在 dart 中发送通知:
Future<void> sendNotificationOnBackground({
@required String token,
}) async {
await firebaseMessaging.requestNotificationPermissions(
const IosNotificationSettings(sound: true, badge: true, alert: true, provisional: false),
);
await Future.delayed(Duration(seconds: 5), () async {
await http.post(
'https://fcm.googleapis.com/fcm/send',
headers: <String, String>{
'Content-Type': 'application/json',
'Authorization': 'key=$SERVERTOKEN', // Constant string
},
body: jsonEncode(
<String, dynamic>{
'notification': <String, dynamic>{
},
'priority': 'high',
'data': <String, dynamic>{
'click_action': 'FLUTTER_NOTIFICATION_CLICK',
'id': '1',
'status': 'done',
'title': 'title from data',
'message': 'message from data'
},
'to': token
},
),
);
});
}
Run Code Online (Sandbox Code Playgroud)
我添加了一个持续时间为 5 秒的等待,以便您可以将应用程序置于后台并验证后台消息是否正在运行
Vin*_*ani 28
可以在下面找到 DomingoMG 代码到 Kotlin 的端口(包括文件路径)。经过测试并在 10.2020 上工作。
/ pubspec.yaml
firebase_messaging: ^7.0.0
Run Code Online (Sandbox Code Playgroud)
/安卓/应用/ src目录/主/科特林/ Application.kt
package YOUR_PACKAGE_HERE
import io.flutter.app.FlutterApplication
import io.flutter.plugin.common.PluginRegistry
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback
import io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService
public class Application: FlutterApplication(), PluginRegistrantCallback {
override fun onCreate() {
super.onCreate()
FlutterFirebaseMessagingService.setPluginRegistrant(this)
}
override fun registerWith(registry: PluginRegistry) {
FirebaseCloudMessagingPluginRegistrant.registerWith(registry)
}
}
Run Code Online (Sandbox Code Playgroud)
/android/app/src/main/kotlin/ FirebaseCloudMessagingPluginRegistrant.kt
package YOUR_PACKAGE_HERE
import io.flutter.plugin.common.PluginRegistry
import io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin
class FirebaseCloudMessagingPluginRegistrant {
companion object {
fun registerWith(registry: PluginRegistry) {
if (alreadyRegisteredWith(registry)) {
return;
}
FirebaseMessagingPlugin.registerWith(registry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"))
}
fun alreadyRegisteredWith(registry: PluginRegistry): Boolean {
val key = FirebaseCloudMessagingPluginRegistrant::class.java.name
if (registry.hasPlugin(key)) {
return true
}
registry.registrarFor(key)
return false
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 8
一些研究,我发现这是有效的。
搜索官方 Flutterfire 存储库,并查看其上的最新插件。
GeneratedPluginRegistrant.registerWith(registry);不起作用,官方文档中也提到了这一点。FlutterFire firebase_messaging。
使用插件io.flutter.plugins.firebase.messaging.FlutterFirebaseMessagingPlugin,这是我从Flutterfire GitHub 存储库中 发现的
目前在 firabase_messaging: 9.0.0
//
import io.flutter.plugin.common.PluginRegistry;
import io.flutter.plugin.common.PluginRegistry.PluginRegistrantCallback;
import io.flutter.plugins.GeneratedPluginRegistrant;
import io.flutter.plugins.firebase.messaging.FlutterFirebaseMessagingBackgroundService;
// Be sure to import the exact Plugin
import io.flutter.plugins.firebase.messaging.FlutterFirebaseMessagingPlugin;
public class Application extends FlutterApplication implements PluginRegistrantCallback {
//
@Override
public void onCreate() {
super.onCreate();
FlutterFirebaseMessagingBackgroundService.setPluginRegistrant(this);
}
@Override
public void registerWith(PluginRegistry registry) {
FlutterFirebaseMessagingPlugin.registerWith(registry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30487 次 |
| 最近记录: |