我正在检查
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>