Android接收无声Firebase通知

时间:2017-10-23 09:15:28

标签: android firebase push-notification

你好我有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>

当应用程序运行时,此代码正在运行,但在后台或终止其无效!!

2 个答案:

答案 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

由于datascreen_id数据等部分的值,您的代码中似乎有data_title``etc. It actually looks you are reading everything from the,我将保留此docs以防万一。在该页面的第一个表中说明了每个通知的处理位置。

由于您使用data,所有通知都将在onMessageReceived中进行管理,因此我能想到的唯一想法就是您从Android Studio终止了该应用(通过停止按钮)。

这样做,应用程序终止,并且还执行后台Firebase实例。所有流程都退出因此,请尝试从手机关闭它,并报告它是否有效。

祝你好运。