12

我遇到了问题,因为我正在测试我的应用程序的某些设备没有收到他们的通知,并且它没有引发异常。

通知来自 FCM,我正在使用自定义服务来显示它们。

MyFirebaseMessaginService.java

static int count = 0;
@Override
public void onMessageReceived(final RemoteMessage remoteMessage) {

    Log.i("remoteMessage",remoteMessage.toString());
    switch(remoteMessage.getData().get("tipo")){
        case "normal":
            notificacionNormal(remoteMessage);
            break;
        case "imagen":
            notificacionImagen(remoteMessage);
            break;
        case "imagen+url":
            notificacionImagenUrl(remoteMessage);
            break;
    }
    count++;
    //Log.d("prueba",remoteMessage.getData().get("imagen"));
}

private void notificacionImagenUrl(RemoteMessage remoteMessage) {
    Intent i = new Intent(Intent.ACTION_VIEW);
    i.setData(Uri.parse(remoteMessage.getData().get("url")));
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 100, i, PendingIntent.FLAG_ONE_SHOT);

    NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
    Notification notif = new Notification.Builder(this)
            .setContentIntent(pendingIntent)
            .setContentTitle(remoteMessage.getNotification().getTitle())
            .setContentText(remoteMessage.getNotification().getBody())
            .setSmallIcon(R.mipmap.ic_launcher)
            .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher))
            .setStyle(new Notification.BigPictureStyle().bigPicture(getImagae(remoteMessage.getData().get("imagen"))))
            .build();
    notif.flags |= Notification.FLAG_AUTO_CANCEL;
    notificationManager.notify(count, notif);

}

目前它只发生在具有 android 6.0.1 的 root 设备中希望你能帮助我:)

编辑:我发送的通知 HTTP 请求:

"to": "/topics/general",
        "notification" : {
          "title": "title",
          "body": "body",
        },
        "data": {
          "tipo": "normal",
        }
4

3 回答 3

1

造成这种情况的可能原因之一可能是您正在测试的某些设备没有 Google Play 服务或其更新版本。在您的活动中,尝试检查 google play 服务。您可以使用此处回答的功能:

protected boolean checkPlayServices() {
final int resultCode = 

GooglePlayServicesUtil.isGooglePlayServicesAvailable(activity());
    if (resultCode != ConnectionResult.SUCCESS) {
        if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) {
            Dialog dialog = GooglePlayServicesUtil.getErrorDialog(resultCode, activity(),
                    PLAY_SERVICES_RESOLUTION_REQUEST);
            if (dialog != null) {
                dialog.show();
                dialog.setOnDismissListener(new OnDismissListener() {
                    public void onDismiss(DialogInterface dialog) {
                        if (ConnectionResult.SERVICE_INVALID == resultCode) activity().finish();
                    }
                });
                return false;
            }
        }
        new CSAlertDialog(this).show("Google Play Services Error",
                "This device is not supported for required Goole Play Services", "OK", new Call() {
                    public void onCall(Object value) {
                        activity().finish();
                    }
                });
        return false;
    }
    return true;
}
于 2016-06-09T06:38:03.613 回答
0

它有时发生在低端设备上。一种解决方案是清除 Google Play Services App 的应用数据和缓存。这对我有用。

于 2017-05-04T14:30:07.777 回答
0

我不知道这是否有效,但您的原始 JSON 正文是错误的。您忘记了{}外部作为 JSON 对象。下面应该是您要发送的消息。

{
    "to": "/topics/general",
    "notification" : {
        "title": "title",
        "body": "body",
    },
    "data": {
        "tipo": "normal",
    }
}
于 2017-08-25T09:48:26.167 回答