gpt4 book ai didi

android - Cordova 中的后台 Firebase 推送通知

转载 作者:行者123 更新时间:2023-11-29 15:01:33 28 4
gpt4 key购买 nike

我正在使用 phonegap-plugin-push用于在 Cordova 应用程序中接收通知。我正在 android Marsh-mellow 上部署以进行测试。

我想查看并存储通过 Firebase Console 收到的通知的内容 当应用程序处于后台时。

这是我的代码-

    document.addEventListener("deviceready",onDeviceReady,false);
function onDeviceReady(){

var push = PushNotification.init({ "android": {"senderID": "91254247XXXX"}});

push.on('registration', function(data) {
console.log(data.registrationId);
//document.getElementById("gcm_id").innerHTML = data.registrationId;
});

push.on('notification', function(data) {

alert("On Notification function!!");
// data.message,
// data.title,
// data.count,
// data.sound,
// data.image,
// data.additionalData
console.log("notification event");
console.log(JSON.stringify(data));
alert(JSON.stringify(data));
//Do something
});

push.on('error', function(e) {
alert(e);
});
}

当应用程序处于前台(在屏幕上)时,我会正确接收内容(标题、消息、数据等),并且能够直接在应用程序的警告框中看到它们。

但是当应用程序处于后台(不在屏幕上但在后台运行)时,我会在通知区域收到通知。当我点击收到的通知时,它会将我重定向到应用中上次打开的页面。

未调用函数 push.on('notification', function(data) {}。未显示任何警报消息。有人可以帮助我如何访问通知消息和数据吗?

最佳答案

经过 2 天的研究,我找到了答案。我们必须在数据字段中将“content-available”设置为 1。否则,如果应用程序在后台,它不会调用通知 block 。

现在通过 Google Firebase Console 这是不可能的.

我们必须send our custom payload messages (数据或通知或两者)分别使用 firebase servers 中的任何一个.

详细信息可以在 plugin's GitHub Page 上找到关于后台通知。

我使用了 NodeJs firebase-admin .我关注了这些 setup guidelines还有这些steps for sending messages它对我有用。

这是我的工作代码 (NodeJS) -

var admin = require("firebase-admin");

var serviceAccount = require("pushnotificationapp-xxxxx.json"); //this is the service account details generated from server

admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://pushnotificationappxxxxx.firebaseio.com/" //your database URL here.
});

var registrationToken = "eYjYT0_r8Hg:APA91bG0BqWbT7XXXXX....."; //registration token of the device
var payload ={
"data": {
"title": 'Test Push',
"message": 'Push number 1',
"info": 'super secret info',
"content-available": '1' //FOR CALLING ON NOTIFACATION FUNCTION EVEN IF THE APP IS IN BACKGROUND
}
};

//send the notification or message
admin.messaging().sendToDevice(registrationToken, payload)
.then(function(response) {
console.log("Successfully sent message:", response);
})
.catch(function(error) {
console.log("Error sending message:", error);
});

更新:

我也使用 php 服务器实现了相同的功能。这是我使用 HTTP POST 发送通知的工作 php 代码到 FCM 服务器-

<?php

$url = 'https://fcm.googleapis.com/fcm/send';

$data =
array(
"to" => "eYjYT0_r8Hg:APA91bG0BqWbT7XXXXX.....",
"data" => array(
"title"=> 'Test Push',
"message"=> 'Push number 1',
"info"=> 'super secret info',
"content-available"=> '1')

);

// use key 'http' even if you send the request to https://...
$options = array(
'http' => array(
'header' => array("Content-Type:application/json",
"Authorization:key=AAAA1HfFM64:APA91XXXX...."), //this is the server authorization key from project settings tab in your Firebase Project
'method' => 'POST',
'content' => json_encode($data)
)
);

$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);

if ($result === FALSE) { echo "Caught an error"; }
else{
echo $result;
}
?>

关于android - Cordova 中的后台 Firebase 推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44368640/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com