我正在检查
Firebase Cloud Messaging发送通知.当应用程序处于开放状态时,已经实现了它并收到通知.但如果我关闭应用程序,它不再通知.有没有解决办法.
码:
- WebRequest wRequest;
- wRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send");
- wRequest.Method = "post";
- wRequest.ContentType = " application/json;charset=UTF-8";
- wRequest.Headers.Add(string.Format("Authorization: key={0}",AppId));
- wRequest.Headers.Add(string.Format("Sender: id={0}",SenderId));
- string postData = "{\"registration_ids\":[\"" + regIds + "\"],\"data\": "+ value +"}";
- Byte[] bytes = Encoding.UTF8.GetBytes(postData);
- wRequest.ContentLength = bytes.Length;
- Stream stream = wRequest.GetRequestStream();
- stream.Write(bytes,bytes.Length);
- stream.Close();
- WebResponse wResponse = wRequest.GetResponse();
消息服务 –
- public class MessagingService extends FirebaseMessagingService {
- @Override
- public void onMessageReceived(RemoteMessage remoteMessage) {
- Map<String,String> data = remoteMessage.getData();
- sendNotification(data);
- }
- public void showMessage(Map<String,String> serverData) {
- Intent i = new Intent(this,MainActivity.class);
- i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- PendingIntent pendingIntent = PendingIntent.getActivity(this,i,PendingIntent.FLAG_UPDATE_CURRENT);
- NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
- .setAutoCancel(true)
- .setContentTitle(serverData.get("Title"))
- .setContentText(serverData.get("Message"))
- .setSmallIcon(R.drawable.common_google_signin_btn_icon_dark)
- .setContentIntent(pendingIntent);
- NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
- manager.notify(Integer.parseInt(serverData.get("ItemId")),builder.build());
- }
- private void sendNotification(Map<String,String> serverData) {
- Intent intent = new Intent(this,MainActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- PendingIntent pendingIntent = PendingIntent.getActivity(this,0 /* request code */,intent,PendingIntent.FLAG_UPDATE_CURRENT);
- long[] pattern = {500,500,500};
- Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
- NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
- .setSmallIcon(R.drawable.common_google_signin_btn_icon_dark)
- .setContentTitle(serverData.get("Title"))
- .setContentText(serverData.get("Message"))
- .setAutoCancel(true)
- .setVibrate(pattern)
- .setLights(Color.BLUE,1,1)
- .setSound(defaultSoundUri)
- .setContentIntent(pendingIntent);
- NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
- notificationManager.notify(Integer.parseInt(serverData.get("ItemId")),notificationBuilder.build());
- }
- }
主要活动-
- public class MainActivity extends AppCompatActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- FirebaseMessaging.getInstance().subscribeToTopic("test");
- FirebaseInstanceId.getInstance().getToken();
- }
- }
表现-
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="test.com.firebasenotify">
- <uses-permission android:name="android.permission.INTERNET"/>
- <uses-permission android:name="android.permission.READ_PHONE_STATE" />
- <application
- android:allowBackup="true"
- android:icon="@mipmap/ic_launcher"
- android:label="@string/app_name"
- android:supportsRtl="true"
- android:theme="@style/AppTheme">
- <activity android:name=".MainActivity">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <service android:name=".MessagingService">
- <intent-filter>
- <action android:name="com.google.firebase.MESSAGING_EVENT" />
- </intent-filter>
- </service>
- <service android:name=".InstanceIDService">
- <intent-filter>
- <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
- </intent-filter>
- </service>
- </application>
- </manifest>