플러그인 레지스트리를 FloatterEngine으로 변환할 수 없습니다.
Flooth를 버전 1.12.13으로 업데이트하자마자 이 문제를 발견하여 수정할 수 없습니다.firebase_messaging 튜토리얼을 보내면서 다음 오류가 발생했습니다. "error: compatible types: PluginRegistry는 FlotEngine GeneratedPluginRegistrant.register로 변환할 수 없습니다.(등록부); "제 코드는 다음과 같습니다.
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);
}
}
이 코드 줄 바꾸기:
GeneratedPluginRegistrant.registerWith(registry);
이것으로:
FirebaseMessagingPlugin.registerWith(registry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));
다음 항목을 가져오십시오.
import io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin;
2019년 12월 31일 업데이트.
Firebase 클라우드 메시징 도구를 사용하여 알림을 보내면 안 됩니다. 그러면 제목과 본문을 사용해야 하기 때문입니다.
제목과 본문 없이 알림을 보내야 합니다.애플리케이션을 백그라운드에서 실행할 수 있습니다.
당신에게 도움이 된다면 이 답변에 대한 투표를 해주시면 감사하겠습니다, 감사합니다.
저는 임시 해결책을 찾았습니다.이것이 최선의 해결책인지는 모르겠지만 제 플러그인은 예상대로 작동하고 문제는 io에서 제공하는 레지스트리에 있다고 생각합니다.팔랑팔랑플러그인화재 기지 메시지164번 라인의 Float Firebase 메시지 서비스입니다.
내 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>
내 지원서.자바
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);
}
}
My Firebase 클라우드 메시징 플러그인 등록자.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;
}
}
다트로 알림 보내기:
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
},
),
);
});
}
애플리케이션을 백그라운드에 배치하고 백그라운드의 메시지가 실행 중인지 확인할 수 있도록 5초의 대기 시간을 추가했습니다.
DomingoMG의 코드 포트를 Kotlin에 연결하면 아래에서 찾을 수 있습니다(파일 경로 포함).2020년 10월 10일 테스트 및 작업.
/tftspec.tftl
firebase_messaging: ^7.0.0
/android/app/src/main/kotlin/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)
}
}
/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
}
}
}
몇 가지 조사를 해보니 효과가 있었습니다.
공식 Flutterfire 저장소를 검색하고 최신 플러그인을 확인했습니다. GeneratedPluginRegistrant.registerWith(registry);
작동하지 않았습니다. 공식 문서에도 언급되어 있습니다.FloatFirefirebase_messaging입니다.
플러그인 사용io.flutter.plugins.firebase.messaging.FlutterFirebaseMessagingPlugin
플로터파이어 깃허브레포에서 발견한 것은
현재 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"));
}
}
저스트 두
GeneratedPluginRegistrant.registerWith((FlutterEngine) registry);
대신에
GeneratedPluginRegistrant.registerWith(registry);
도밍고MG의 답변 외에도, 제거하는 것을 잊지 마십시오.
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
Android 폴더 아래의 주 활동 파일에서.그렇지 않으면 오류가 발생합니다.
Firebase Messaging 패키지의 단계에서 워터 클래스만 추가했는데 해결되었습니다.
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;
}}
이것이 효과가 있다는 것을 알았습니다.
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
super.configureFlutterEngine(flutterEngine);
// continue with custom method channel registration.
...
}
또한 사용해야 하는지 여부를 잘 모르겠습니다.cleanUpFlutterEngine
메서드 채널 등록을 치료합니다.
MainActivity.java 파일을 package co.appbrewery.micard로 변경합니다.
수입 수입품팔랑팔랑Floating 활동;
공용 클래스 기본 활동이 Floating 활동 {}을(를) 확장합니다.
}
언급URL : https://stackoverflow.com/questions/59446933/pluginregistry-cannot-be-converted-to-flutterengine
'programing' 카테고리의 다른 글
LibreOffice 공식을 한 번에 전체 열의 계산된 값으로 바꾸기 (0) | 2023.06.07 |
---|---|
Google 도메인 - Firebase 호스팅을 위한 DNS 구성 - 도메인 연결 (0) | 2023.06.07 |
중첩된 모든 사전 값을 반복하시겠습니까? (0) | 2023.06.07 |
이상한 Vuex 버그: "정의되지 않음", (콘솔에 정의됨이 표시되는 경우)? (0) | 2023.06.07 |
범위의 모든 셀이 "True"인지 검색하고 그렇지 않으면 "False"를 표시하는 Excel 공식 (0) | 2023.06.07 |