你好我有Android应用程序,我使用Firebase通知及其工作良好,现在我需要接收静音推送没有警报或任何东西,,,我尝试了一些想法,它的工作在应用程序运行时,但当应用程序在后台或终止它不工作!如果有人有想法解决这个问题,请告诉我:)这是我的代码
<div id="map"></div>
<script>
var map;
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
zoom: 17,
center: new google.maps.LatLng(40.712696, -74.005019),
mapTypeId: 'roadmap'
});
var iconBase = 'https://maps.google.com/mapfiles/kml/shapes/';
var icons = {
parking: {
icon: iconBase + 'parking_lot_maps.png'
},
library: {
icon: iconBase + 'library_maps.png'
},
info: {
icon: iconBase + 'info-i_maps.png'
}
};
var features = [{
position: new google.maps.LatLng(40.712696, -74.005019),
type: 'parking'
}, {
position: new google.maps.LatLng(40.712753, -74.006081),
type: 'parking'
}, {
position: new google.maps.LatLng(40.713664, -74.007819),
type: 'library'
}];
var infowindow = new google.maps.InfoWindow({
content: "test"
});
// Create markers.
features.forEach(function(feature) {
var marker = new google.maps.Marker({
position: feature.position,
icon: icons[feature.type].icon,
map: map
});
marker.addListener('click', function() {
infowindow.open(map, marker);
});
});
}
</script>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDvkk7wNQcIYXZ7S8XNG8cG-elq0QE2v3k&callback=initMap">
</script>
当应用程序运行时,此代码正在运行,但在后台或终止其无效!!
答案 0 :(得分:0)
当您的应用处于&#39;系统托盘&#39;这就是为什么没有调用FirebaseMessagingService.onMessageReceived。
当您的应用在后台时,Android会将通知消息定向到系统托盘。用户点按通知会默认打开应用启动器。
尝试发送将调用onMessageReceived的数据有效负载。你的代码会 工作 对于数据信息.... 从FirebaseInstanceIdService获取firebase令牌并将其发送到应用服务器。 谷歌有非常好的文档发送它Here
您也可以使用php发送它。
然后在onMessageReceived
上if (remoteMessage.getData().size() > 0) {
String title = remoteMessage.getData().get("title");
String body = remoteMessage.getData().get("body");
String screen = remoteMessage.getData().get("screen");
sendNotification(title, body, screen );}
对于服务器端php实现
<?php
$path_to_fcm = "https://fcm.googleapis.com/fcm/send";
$headers = array(
'Authorization:key='YOUR_SERVER_KEY,
'Content-Type:application/json'
);
$reg_id_array = array
(
'token1',
'token2'
)
$mesg = array
(
'title'=>$_POST['title'],
'body'=> $_POST['message'],
'url'=>$_POST['Screen'],
);
$fields = array("registration_ids"=>$reg_id_array, 'data'=>$mesg);
$payload = json_encode($fields);
$curl_session = curl_init();
curl_setopt($curl_session, CURLOPT_URL, $path_to_fcm);
curl_setopt($curl_session, CURLOPT_POST, true);
curl_setopt($curl_session, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl_session, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_session, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_session, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
curl_setopt($curl_session, CURLOPT_POSTFIELDS, $payload);
$Qresult = curl_exec($curl_session);
$httpcode = curl_getinfo($curl_session , CURLINFO_HTTP_CODE);
curl_close($curl_session);
if ($httpcode==200) {
echo "Success";
}
?>
抱歉坏英语
答案 1 :(得分:0)
通知包含2个thigs:
notification
本身和
额外data
。
由于data
,screen_id
数据等部分的值,您的代码中似乎有data_title``etc. It actually looks you are reading everything from the
,我将保留此docs以防万一。在该页面的第一个表中说明了每个通知的处理位置。
由于您使用data
,所有通知都将在onMessageReceived
中进行管理,因此我能想到的唯一想法就是您从Android Studio终止了该应用(通过停止按钮)。
这样做,应用程序终止,并且还执行后台Firebase实例。所有流程都退出因此,请尝试从手机关闭它,并报告它是否有效。
祝你好运。