2

Hallo Leute Entschuldigung für mein schlechtes Englisch. Wie geht es dir? Vor ein paar Monaten habe ich FCM Push Notifications implementiert. Das Hauptproblem ist, wenn App geschlossen wird, Benachrichtigungen nicht ankommen, wenn dies auf dem Gerät passiert.Android FCM Push-Benachrichtigung nicht erhalten, wenn App geschlossen wird

Ich versuchte eine Menge Thigs für das funktioniert; Wenn Benachrichtigung die Server-Antwort mit "Erfolg" gesendet, aber ich habe nie erhalten.

Dies ist der vollständige Code. Android, Manifiest und Server.

Android:

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()); 
    } 
} 

Server:

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> 

, dass alle Jungs ist. Ich hoffe ihr könnt mir helfen! Ich weiß nicht, was ich damit machen soll. Vielen Dank!

+0

Wir sind gut danke für die Begrüßung. Ich schätze, Sie verwenden die Firebase-Konsole, um Benachrichtigungen zu versenden, oder? Sie müssen Ihren eigenen Server implementieren, ich weiß, zusätzliche Arbeit, ging durch die gleiche implementiert meine in Java, Sie können auch PHP verwenden. Lesen Sie hierzu: http://stackoverflow.com/questions/37711082/how-to-handle-notification-when-app-in-background-in-firebase – Manny265

+0

und Beamte Dokumente erklären Arten von Nachrichten und wann jedes empfangen wird https://firebase.google.com/docs/cloud-messaging/concept-options – Manny265

+0

@ Manny264 das ist mein eigener Server, ist nicht die Firebase-Konsole. Ich lese die Dokumente über Arten von Nachrichten. Sie können sehen, dass ich nur Datennachrichten sende, die bearbeitet werden, wenn die App geschlossen wird. habe ich schon damit probiert. Danke, Mann! Wenn Sie einen anderen Vorschlag haben, sagen Sie es mir bitte. Danke nochmal. –

Antwort

0

In meinem Fall habe ich ein Huawei P8 Lite und damit auf dem Hintergrund ausgeführt werden kann.

Dies ist der Link, wo Sie diesen Fall finden können.

Solution on Huawei devices

Verwandte Themen