programing

플러그인 레지스트리를 FloatterEngine으로 변환할 수 없습니다.

mytipbox 2023. 6. 7. 23:49
반응형

플러그인 레지스트리를 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

반응형