Firebase Cloud Messaging Android 推送通知不起作用



我有一个安卓应用程序,它应该向用户发送推送通知。当用户收到通知时,用户点击通知,应用程序将打开,并在 android 网络视图中打开一个 URL。

但我的应用没有收到任何通知。 这是代码

public class MainActivity extends AppCompatActivity {
private WebView webView;
private ProgressDialog dialog;
private BroadcastReceiver mRegistrationBroadcastReciever;
private final String CHANNEL_ID="notificcation";        
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView=(WebView)findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
if(dialog.isShowing())
dialog.dismiss();
}
});     
mRegistrationBroadcastReciever=new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Config.STR_PUSH)){
String message=intent.getStringExtra(Config.STR_MESSAGE);
showNotification("MSG",message);
}    
}
};
onNewIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
dialog=new ProgressDialog(this);
if(intent.getStringExtra(Config.STR_KEY)!=null){
dialog.show();
dialog.setMessage("Please Wait");
webView.loadUrl(intent.getStringExtra(Config.STR_KEY));    
}
}    
private void showNotification(String title, String message) {
Intent intent =new Intent(getBaseContext(),MainActivity.class);
intent.putExtra(Config.STR_KEY,message);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent contentIntent=PendingIntent.getActivity(getBaseContext(),0,intent,PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder=new NotificationCompat.Builder(getBaseContext(),CHANNEL_ID);
builder.setAutoCancel(true)
.setWhen(System.currentTimeMillis())
.setDefaults(Notification.DEFAULT_ALL)
.setSmallIcon(R.mipmap.ic_launcher_round)
.setContentTitle(title)
.setContentText(message)
.setContentIntent(contentIntent);
NotificationManager notificationManager = (NotificationManager)getBaseContext().getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(1,builder.build());
}
@Override
protected void onPause() {
LocalBroadcastManager.getInstance(this).unregisterReceiver(mRegistrationBroadcastReciever);
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
LocalBroadcastManager.getInstance(this).registerReceiver(mRegistrationBroadcastReciever,new IntentFilter("registration Complete"));
LocalBroadcastManager.getInstance(this).registerReceiver(mRegistrationBroadcastReciever,new IntentFilter(Config.STR_PUSH));
}
}

FirebaseMessagingService

public class MyFirebaseMessagingService extends FirebaseMessagingService{
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
handleMessage(remoteMessage.getData().get(Config.STR_KEY));
}
private void handleMessage(String message) {
Intent pushNotification=new Intent(Config.STR_PUSH);
pushNotification.putExtra(Config.STR_MESSAGE,message);
LocalBroadcastManager.getInstance(this).sendBroadcast(pushNotification);

}
}

Firebase 实例类

public class MyFirebaseIdService extends FirebaseInstanceIdService {
@Override
public void onTokenRefresh() {
super.onTokenRefresh();
String token = FirebaseInstanceId.getInstance().getToken();
sendToServer(token);
}
private void sendToServer(String token) {

}
}

通过 Firebase 控制台发送的消息将被视为notification消息负载。从代码中,您只处理data消息有效负载 (remoteMessage.getData()这些有效负载可能为 null。您可以通过 Firebase 控制台添加高级选项,将data消息有效负载与notification消息内容一起添加。

此外,FirebaseInstanceIdService已被弃用。继续在FirebaseMessagingService中使用onNewToken()

首先,您使用的是仅在您的主活动当前位于前台时才注册的LocalBroadcastManager

其次,您发送的是什么样的信息?它们可以是数据通知消息。如果使用数据,我会摆脱LocalBroadcastManager并在MyFirebaseMessagingService中声明showNotification方法,以便您可以直接从那里显示通知。

如果您使用的是通知消息。如果您的应用程序在后台运行,则推送通知将由系统托盘处理,并且仅当您的应用程序位于前台时,才会调用onMessageReceived

请在此处查看文档:https://firebase.google.com/docs/cloud-messaging/android/receive

最重要的部分:

为大多数消息类型提供了onMessageReceived,但以下情况除外:

  • 应用在后台运行时发送的通知消息。在这种情况下,通知将传递到设备的系统托盘。默认情况下,用户点击通知会打开应用启动器。
  • 具有通知和数据有效负载(后台和前台(的消息。在这种情况下,通知将传递到设备的系统托盘,并且数据有效负载将在启动器活动意图的额外内容中传递。

相关内容

  • 没有找到相关文章

最新更新