应用程序上的FCM已关闭

时间:2017-04-28 12:31:12

标签: android firebase android-service firebase-cloud-messaging

我已在我的应用中实施了FCM通知系统,我的问题是只有在应用程序正在运行或在后台运行时它才能正常工作,但如果它被杀死通知没有出现,我就是这个代码< / p>

Manifest.xml
 <service android:name="com.Ryuk.listenme.FirebaseMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
</service>
______________________________________________________________

myServer.php

function notify($tokens,$message)
{

$url = 'https://fcm.googleapis.com/fcm/send';
$fields = array(
              'registration_ids' => $tokens,
              'data' => $message         
              );
$headers = array(
                'Authorization:key = mycode',
                'Content-Type: application/json'
                );

   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, $url);
   curl_setopt($ch, CURLOPT_POST, true);
   curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);  
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
   curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
   $result = curl_exec($ch);
   if ($result === FALSE) {
       die('Curl failed: ' . curl_error($ch));
   }
   curl_close($ch);
   return $result;
}
______________________________________________________________

FirebaseMessagingServer.java //which works only in running/background

public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService
{
@Override
public void onMessageReceived(RemoteMessage remoteMessage)
{

    showNotification(remoteMessage.getData().get("message"));
}

private void showNotification(String message)
{
    Intent i = new Intent ();
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this,0,i,PendingIntent.FLAG_ONE_SHOT);
    NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
            .setAutoCancel(true)
            .setContentTitle("Test FCM")
            .setContentText(message)
            .setSmallIcon(R.drawable.common_google_signin_btn_icon_dark)

            .setContentIntent(pendingIntent);
    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    manager.notify(0,builder.build());

}
}

我不会&#39;知道问题是在我的应用程序或我的消息格式(在PHP中),我在谷歌尝试了这么多的解决方案,但他们一年前是现实的,他们没有工作

3 个答案:

答案 0 :(得分:2)

应用程序强行关闭后,您将无法收到背景意图。这个 包括GCM / FCM消息。

&#34;从Android 3.1开始,系统的软件包管理器会跟踪处于停止状态的应用程序,并提供从后台进程和其他应用程序控制其启动的方法。&#34; < / p>

&#34;请注意,系统会将FL​​AG_EXCLUDE_STOPPED_PACKAGES添加到所有广播意图中。这样做是为了防止来自后台服务的广播无意或不必要地启动已停止应用程序的组件。&#34; https://developer.android.com/about/versions/android-3.1.html#launchcontrols

GCM push notification works after app Force Stop?

有趣的是,三星设备通常使用&#34;优化应用程序&#34;特征。这可能会影响您的应用。有关详细信息,请参阅此处 - Samsung "App optimisation" feature kills background applications after 3 days

答案 1 :(得分:1)

根据文件。

  

当您的应用在后台时,Android会指示通知   消息到系统托盘。用户点击通知即可打开   应用程序启动器默认情况下。

     

这包括同时包含通知和数据的邮件   有效载荷。在这些情况下,通知会传递给设备   系统托盘,数据有效负载是在附加的   你的发射器活动的意图。

当您在background时,FCM将根据通知有效负载中的信息在系统托盘中显示通知。从通知有效负载中获取标题,消息和图标。有关更多信息,请参阅此question

答案 2 :(得分:0)

我已经解决了,这是我手机中的设置,可以阻止通知