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