并不总是通过电话收到通知?



我的Android手机并不总是收到通知,即使Cloud Functions总是发送它们。作为一个有用的侧节点:总是收到WhatsApp消息(我测试过(。

我注意到手机充电或打开应用程序时会立即收到通知。

此外,即使已显示通知,用户的 UID 也并不总是发送到数据库(通过阅读代码,您将理解我的意思(。

我的问题是:我可以更改什么来接收通知,然后像应该的那样一直推送到数据库?

我的通知是"抬头"类型。

几天来我一直在尝试优化我的代码,但没有成功。我需要帮助。

代码结构:

  1. 收到消息后,将用户的UID推送到数据库,以查看稍后通知了多少人。
  2. 向用户发送通知。

    public class MyFirebaseMessagingService extends FirebaseMessagingService {
    // Firebase instance variables
    private FirebaseAuth mFirebaseAuth;
    private FirebaseUser mFirebaseUser;
    DatabaseReference myURL = FirebaseDatabase.getInstance().getReferenceFromUrl("https://newproj-54a87.firebaseio.com/notified");
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
    // Check if message contains a data payload.
    if (remoteMessage.getData() != null) {
    mFirebaseAuth = FirebaseAuth.getInstance();
    mFirebaseUser = mFirebaseAuth.getCurrentUser();
    if(mFirebaseUser != null)
    mUID = mFirebaseUser.getUid();
    myURL.push().setValue(mUID);
    sendNotification(remoteMessage.getData().get("body"), remoteMessage.getData().get("title"), remoteMessage.getData().get("icon"));
    }
    }
    private void sendNotification(String messageBody, String messageTitle, String iconURL) {
    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_ONE_SHOT);
    Bitmap bitmap = getBitmapFromURL(iconURL);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
    .setDefaults(DEFAULT_SOUND | DEFAULT_VIBRATE)
    .setPriority(Notification.PRIORITY_MAX)
    .setStyle(new NotificationCompat.BigTextStyle())
    .setSmallIcon(R.drawable.myIcon)
    .setLargeIcon(bitmap)
    .setContentTitle(messageTitle)
    .setContentText(messageBody)
    .setAutoCancel(true)
    .setContentIntent(pendingIntent);
    NotificationManager notificationManager =
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
    }
    public Bitmap getBitmapFromURL(String strURL) { //from https://stackoverflow.com/a/16007659
    try {
    URL url = new URL(strURL);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setDoInput(true);
    connection.connect();
    InputStream input = connection.getInputStream();
    Bitmap myBitmap = BitmapFactory.decodeStream(input);
    return myBitmap;
    } catch (IOException e) {
    e.printStackTrace();
    return null;
    }
    }
    }
    

我的云功能:

const payLoad = {
data:{
title: name,
body: body,
icon: photoURL
}
};
var options = {
priority: "high",
timeToLive: 1000
};
return admin.messaging().sendToTopic("notify", payLoad, options);

如果我忘记了一条信息,请告诉我。我正在按有限的时间表运行!

如果您使用的是Android 6.0或更高版本,则有一个名为"打瞌睡"的功能可以优化电池使用。 当您的手机处于空闲状态(并且未充电(时,它只会收到高优先级的 FCM 通知,可能就是这种情况。

安卓文档 说:

FCM 经过优化,可通过以下方式与低电耗器和应用程序待机空闲模式配合使用 的高优先级 FCM 消息。FCM 高优先级消息让您 可靠地唤醒应用以访问网络,即使用户的 设备处于低电耗模式或应用程序处于应用程序待机模式。在打瞌睡或应用中 待机模式,系统传递消息并给出应用程序 临时访问网络服务和部分唤醒锁,然后 将设备或应用返回到空闲状态。

因此,如果使用FCM数据消息,您的后端应该开始发送字段"priority" : "high"
参考: https://firebase.google.com/docs/cloud-messaging/concept-options

相关内容

  • 没有找到相关文章