31 दिसंबर 2019 को अपडेट किया गया।
नोटिफिकेशन भेजने के लिए आपको फायरबेस क्लाउड मैसेजिंग टूल का उपयोग नहीं करना चाहिए, क्योंकि यह आपको शीर्षक और बॉडी का उपयोग करने के लिए मजबूर करता है।
आपको शीर्षक और निकाय के बिना एक अधिसूचना भेजनी होगी। पृष्ठभूमि में एप्लिकेशन है, जो आपके लिए काम करना चाहिए।
यदि यह आपके लिए काम करता है, तो मैं इसकी सराहना करूंगा यदि आप मुझे इस उत्तर पर वोट दे सकते हैं, तो धन्यवाद।
मुझे एक अस्थायी समाधान मिल गया है। मुझे यकीन नहीं है कि यह सबसे अच्छा फिक्स है, लेकिन मेरे प्लगइन्स उम्मीद के मुताबिक काम करते हैं और मुझे लगता है कि समस्या को 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>
मेरा आवेदन .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);
}
}
मेरा फायरबेसक्लाउमेसिंगप्लगिनरिनजिस्टेंट.जवा
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 सेकंड की अवधि के साथ प्रतीक्षा को जोड़ा ताकि आप एप्लिकेशन को पृष्ठभूमि में रख सकें और सत्यापित कर सकें कि पृष्ठभूमि में संदेश चल रहा है