2

嗨,大家对我的糟糕英语感到抱歉。你好吗?几个月前,我实施了FCM推送通知。主要问题是应用程序关闭时,通知不会在设备上发生时发送。应用程序关闭时未收到Android FCM推送通知

我尝试了很多thigs的作品;当通知发送服务器响应与“成功”,但我从来没有收到。

这是完整的代码。 Android,Manifiest和服务器。

安卓

import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.graphics.drawable.BitmapDrawable; 
import android.media.RingtoneManager; 
import android.net.Uri; 
import android.os.Bundle; 
import android.support.v4.app.NotificationCompat; 
import android.util.Log; 
import com.accionait.canje365.R; 
import com.accionait.canje365.activities.ChatActivity; 
import com.accionait.canje365.activities.HomeActivity; 
import com.accionait.canje365.constants.Constants; 
import com.google.firebase.messaging.RemoteMessage; 
import org.json.JSONException; 
import org.json.JSONObject; 
import org.json.JSONTokener; 

public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService { 
    private static final String TAG = "FCM Service"; 

    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 
     super.onMessageReceived(remoteMessage); 

     showNotification(remoteMessage); 
    } 

    private void showNotification(RemoteMessage remoteMessage) { 
     Uri uriDefaultSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

     NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext()) 
     .setSmallIcon(R.mipmap.ic_notification) 
     .setLargeIcon((((BitmapDrawable)getResources().getDrawable(R.mipmap.ic_notification)).getBitmap())) 
     .setContentTitle("TITLE") 
     .setContentText("MESSAGE") 
     .setContentInfo("0") 
     .setAutoCancel(true) 
     .setTicker("Canje365") 
     .setSound(uriDefaultSound); 

     Intent home = new Intent(this, HomeActivity.class); 
     home.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

     PendingIntent intent = PendingIntent.getActivity(this, 0, home, PendingIntent.FLAG_UPDATE_CURRENT); 
     builder.setContentIntent(intent); 

     NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
     notificationManager.notify(1, builder.build()); 
    } 
} 

服务器:

var message = { 
    to: token, 
    data: {valor: 'test'} 
}; 

fcm.send(message, function(err, response){ 
    if(err) { 
     console.log('Error: ' + err); 
    } 
    else { 
     console.log('Notificacion enviada: ', response); 
    } 
}); 

Manifiest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.accionait.canje365"> 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 

    <service android:name=".sync.RunIntentService" /> 
    <service android:name=".sync.FirebaseMessagingService"> 
     <intent-filter> 
      <action android:name="com.google.firebase.MESSAGING_EVENT" /> 
     </intent-filter> 
    </service> 
    <service android:name=".sync.FirebaseIdService"> 
     <intent-filter> 
      <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> 
     </intent-filter> 
    </service> 

    <meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 
    <meta-data 
     android:name="com.google.android.geo.API_KEY" 
     android:value="MY_API_KEY" /> 

    <activity 
     android:name=".activities.MainActivity" 
     android:theme="@style/SplashScreenTheme"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name=".activities.HomeActivity" 
     android:label="@string/title_activity_login" 
     android:screenOrientation="portrait"> 
    </activity> 
</application> 
</manifest> 

这是所有球员。我希望你可以帮助我!我不知道该怎么做。谢谢!

+0

我们非常感谢您的问候。我猜你正在使用Firebase控制台发送正确的通知?你必须实现你自己的服务器,我知道,额外的工作,通过相同的实现我的Java,你也可以使用PHP。阅读此:http://stackoverflow.com/questions/37711082/how-to-handle-notification-when-app-in-background-in-firebase – Manny265

+0

和官员docs解释消息的类型,当每个收到https:/ /firebase.google.com/docs/cloud-messaging/concept-options – Manny265

+0

@ Manny264是我自己的服务器,不是Firebase控制台。我阅读关于消息类型的文档。你可以看到我只发送数据消息来处理应用程序关闭时。 我已经试过这个。谢啦!如果您有其他建议,请告诉我。 再次感谢。 –

回答

0

在我的情况下,我有一个华为P8 Lite,并允许在后台运行。

这是链接,你可以找到详细情况这个案例。

Solution on Huawei devices

相关问题