প্লাগিনরেজিস্ট্রি ফ্লুটারজিনে রূপান্তর করা যায় না


22

আমি খুব শীঘ্রই ফ্লটারটিকে সংস্করণ 1.12.13 সংস্করণে আপডেট করার সাথে সাথে আমি এই সমস্যাটি পেয়েছি এবং এটি ঠিক করতে পারছি না। ফায়ারবেস_ম্যাসেজিং টিউটোরিয়ালটি পাঠিয়েছি এবং নিম্নলিখিত ত্রুটিটি পেয়েছি: "ত্রুটি: অসম্পূর্ণ প্রকারগুলি: প্লাগইনরেজিস্ট্রি ফ্লুটারেঞ্জাইন জেনারেটেড প্লাগইনরেজিস্ট্যান্ট.গ্রিস্টার উইথ (রেজিস্ট্রি) তে রূপান্তর করা যায় না;" আমার কোডটি নিম্নরূপ:

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);
  }
}

আমি এই ত্রুটি পেয়েছি। এখনও কোন সমাধান?
আজানো

না, আমি চেষ্টা করেছি এবং পারি নি
গ্যাব্রিয়েল জি প্যাভান

উত্তর:


21

31 ডিসেম্বর, 2019 এ আপডেট হয়েছে।

বিজ্ঞপ্তিগুলি প্রেরণের জন্য আপনার ফায়ারবেস ক্লাউড মেসেজিং সরঞ্জাম ব্যবহার করা উচিত নয়, কারণ এটি আপনাকে শিরোনাম এবং বডি ব্যবহার করতে বাধ্য করে।

আপনাকে অবশ্যই শিরোনাম এবং বডি ছাড়াই একটি বিজ্ঞপ্তি পাঠাতে হবে। ব্যাকগ্রাউন্ডে অ্যাপ্লিকেশন রয়েছে, এটি আপনার জন্য কাজ করা উচিত।

যদি এটি আপনার পক্ষে কাজ করে তবে আমি এই প্রশংসা করব যদি আপনি এই উত্তরে আমাকে একটি ভোট দিতে পারেন, আপনাকে ধন্যবাদ।


আমি একটি অস্থায়ী সমাধান খুঁজে পেয়েছি। আমি নিশ্চিত না যে এটি সর্বোত্তম ফিক্স তবে আমার প্লাগইনগুলি প্রত্যাশা অনুযায়ী কাজ করে এবং আমি ধরে নিই যে সমস্যাটি io.flutter.plugins.firebasemessasing.FlutterFirebaseMessagingService লাইন 164-র দ্বারা সরবরাহিত রেজিস্ট্রিতে থাকতে হবে।

আমার AndroidManLive.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);
  }
}

আমার ফায়ারব্যাসক্লাউডমেসেজিংপ্লাগিনআগ্রিস্ট্যান্ট.জভা

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 সেকেন্ড সময়কাল সহ একটি ওয়েট যুক্ত করেছি যাতে আপনি অ্যাপ্লিকেশনটিকে পটভূমিতে রাখতে পারেন এবং ব্যাকগ্রাউন্ডে থাকা বার্তাটি চলছে কিনা তা যাচাই করতে পারেন


আমি চেষ্টা করেছি আপনার সমাধান তবে আমি ব্যর্থ হয়েছি, কেবলমাত্র ও ওলান্সাম ও ওয়ানম্যাসেজে রাজ্য উপস্থিত হয়েছে, কেবল ওব্যাকগ্রাউন্ডে নয়। আমি ফায়ারবেসক্লাউডমেসেজিংপ্লাগিনরেজিস্ট্যান্ট.জভা ফাইলটি একইভাবে ফোল্ডারে অ্যাপ্লিকেশন.জভাতে রেখেছি, তা কি ঠিক ছিল? আমি আশা করি খুব শীঘ্রই ফ্লাটার টিম এই সমস্যাটি সমাধান করবে। ততক্ষণে আমাকে সংস্করণ 1.9.1 ব্যবহার করতে হবে, যদিও আমি খুব খারাপভাবে 1.12.13 ব্যবহার করতে চাই
গ্যাব্রিয়েল জি

আপনি কি কোনও প্রকল্প তৈরি করতে পারেন এবং আমার ফিত্তবেস পরীক্ষা প্রকল্পে এটি চালানোর চেষ্টা করার জন্য আপনার গিথুবটিতে আমাকে লিঙ্কটি দিতে পারেন?
গ্যাব্রিয়েল জি প্যাভান

আমি উত্তরটি আপডেট করেছি, আমি যুক্ত করতে একটি গুরুত্বপূর্ণ তথ্য মিস করেছি।
ডোমিংগো এমজি

আমি এমন একটি কাঠামো রেখেছি যা আমাকে ডার্ট দিয়ে পুশ বিজ্ঞপ্তিগুলি প্রেরণে সহায়তা করেছে
ডমিংগো এমজি

এটি কাজ করে। নিশ্চিত না কেন, তবে এটি হয়েছিল। আশা করি ফালতু দলটি পরবর্তী রিলিজে এটি ঠিক করেছে
আভি

10

কোটলিনে ডোমিংগো এমজি কোডের একটি বন্দর নীচে পাওয়া যাবে। 2020 মার্চ পরীক্ষিত এবং কাজ করছে।

pubspec.yaml

firebase_messaging: ^6.0.12

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)
  }
}

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
    }
  }
}

হাই, `` task কার্যটির জন্য কার্যকর করা ব্যর্থ হয়েছে ': অ্যাপ্লিকেশন: মার্জডেক্সডেবগ'। > Com.android.build.gradle.intern.tasks.Workers $ ActionFacade> com.android.builder.dexing.DexArchiveMergerException: ডেক্স আর্কাইভ মার্জ করার সময় ত্রুটি: কীভাবে সমস্যাটি সমাধান করতে হয় তা বিকাশকারী.অ্যান্ড্রয়েড.কম এ শিখুন Learn / স্টুডিও / বিল্ড /… । প্রোগ্রামের ধরণ ইতিমধ্যে উপস্থিত রয়েছে: com.example.gf_demo.FirebaseCloudMessagingPluginRegistrant `` `
কামিল

7

আপনার নীচের কোড লাইনটি প্রতিস্থাপন করুন:

GeneratedPluginRegistrant.registerWith(registry);

এর সাথে:

FirebaseMessagingPlugin.registerWith(registry.registrarFor("io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin"));

1
এটি কাজ করেছে ... কেবল বর্ণিত ক্লাসটি আমদানি করার কথা মনে রাখবেন। আমদানি io.flutter.plugins.firebasemessasing.FirebaseMessagingPlugin;
জায়ন

1

ডোমিংগো এমজি-র উত্তর ছাড়াও, অপসারণ করতে ভুলবেন না

@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);

অ্যান্ড্রয়েড ফোল্ডারের অধীনে মূল সক্রিয়তা ফাইল থেকে। যদি তা না হয় তবে আপনি একটি ত্রুটি পাবেন।


তবে আমি কোথায় আমার নিজের মেথডচ্যানেলটি রেজিস্ট্রেশন করতে পারি, যখন আমি কনফিগার ফ্লুটারএঙ্গিনকে সরিয়ে দেব?
কামিল স্ববোদা

ডোমিংগো এমজি-র উত্তর অনুসারে ফায়ারবেসক্লাউডমেসেজিং প্লাগিনআজিজিস্ট্র্যান্ট.জভা ইতিমধ্যে "নিবন্ধকারের সাথে ..." নিবন্ধকরণ করে থাকে তাই সেজন্য কনফিগারফ্লুটার এজেনার আর দরকার নেই। এতে আপনার প্রশ্নের উত্তর হলো কি?
অ্যাক্সেস গ্রিন্ডস

আমি বুঝতে পেরেছি ফায়ারবেসক্লাউডম্যাসেজিংপ্লাগিনআজিজিস্ট্যান্ট.জভা কনফিগারফ্লুটারেঞ্জিনের পরিবর্তে নিবন্ধকরণ করে। তবে কনফিগার ফ্লুটারএঙ্গাইন এমন এক জায়গা যেখানে আমি নেটিভ এপিআই কল করতে আমার নিজস্ব মেথডচ্যানেলটি রেজিস্ট্রেশন করতে পারি (দয়া করে ফ্লুটার.দেবতে "কাস্টম প্ল্যাটফর্ম-নির্দিষ্ট কোড রচনা" দেখুন)। ফ্ল্যাটারএজাইন পদ্ধতিটি কনফিগার করা সরানো হলে আমি কোথায় মেথডচ্যানেল নিবন্ধন করতে পারি?
কামিল স্ববোদা

প্ল্যাটফর্ম-নির্দিষ্ট কোড লেখার সাথে আমার কোনও অভিজ্ঞতা নেই। দুঃখিত যে আমি এই তথ্য সাহায্য করতে পারে না। আমি আশা করি আপনি একটি উত্তর পেয়েছি।
অক্ষগুলি

1

আমি ফায়ারবেস মেসেজিং প্যাকেজের পদক্ষেপগুলি থেকে অতিরিক্ত হিসাবে কেবল জল শ্রেণি যুক্ত করেছি এবং এটি সমাধান করা হয়েছিল:

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;
}}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.