1

Ich versuche, FCM in meiner App zu implementieren. Momentan kann ich Nachrichten empfangen, wenn ich sie von der Firebase App-Konsole sende. Aber wenn ich versuche, Nachrichten von meinem Server zu senden, wird die Nachricht nicht an das Telefon übermittelt. Ich erhalte jedoch einen Erfolgsstatus, nachdem ich eine Nachricht vom Server gesendet habe, und es wird an 1 Gerät ausgeliefert. Jede Hilfe wäre willkommen.FCM-Nachrichten erreichen das Gerät nicht, wenn es vom Server gesendet wird

Danke.

Manifest-Datei:

</application> 

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


<service 
    android:name=".FirebaseInstanceIDService"> 
    <intent-filter> 
     <action  android:name="com.google.firebase.INSTANCE_ID_EVENT"/> 
    </intent-filter> 
</service> 

</manifest> 

Build.gradle App:

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:24.0.0' 
    compile 'com.android.support:design:24.0.0' 
    compile 'com.squareup.okhttp3:okhttp:3.2.0' 
    compile 'com.google.firebase:firebase-messaging:9.0.2' 
} 

apply plugin: 'com.google.gms.google-services' 

Build.gradle Projekt:

buildscript { 
    repositories { 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:2.1.2' 
     classpath 'com.google.gms:google-services:3.0.0' 



    } 
} 

allprojects { 
    repositories { 
     jcenter() 
    } 
} 

task clean(type: Delete) { 
    delete rootProject.buildDir 
} 

Code:

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(this,MainActivity.class); 
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

    PendingIntent pendingintent = PendingIntent.getActivity(this,0,i,PendingIntent.FLAG_UPDATE_CURRENT); 

    android.support.v4.app.NotificationCompat.Builder builder = new NotificationCompat.Builder(this) 
      .setAutoCancel(true) 
      .setContentTitle("FCM Test") 
      .setContentText(message) 
      .setSmallIcon(R.drawable.common_google_signin_btn_icon_dark) 
      .setContentIntent(pendingintent); 

    NotificationManagerCompat manager =(NotificationManagerCompat) getSystemService(NOTIFICATION_SERVICE); 
    manager.notify(0,builder.build()); 

} 



} 





public class FirebaseInstanceIDService extends FirebaseInstanceIdService { 

@Override 
public void onTokenRefresh() { 


    String token = FirebaseInstanceId.getInstance().getToken(); 
    System.out.println("TOKEN " + token); 
} 
} 

Server Side-Code:

function send_notification ($tokens, $message) 
{ 
    $url = 'https://fcm.googleapis.com/fcm/send'; 
    $fields = array(
     'registration_ids' => $tokens, 
     'data' => $message 
     ); 
    $headers = array(
     'Authorization:key = ***********************************', 
     '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; 
} 


$tokens = array(); 
$tokens[] = "***********************************************"; 

$message = array("message" => " DEEPAK PUSH TEST MESSAGE"); 
$message_status = send_notification($tokens, $message); 
echo $message_status; 
+1

Post Code/logcat.You sollten mehr Informationen geben –

+0

bitte stellen Sie sicher, hat dieses Bild ** Google-Dienste ** Datei und enthält Firebase url 'PROJECT_INFO ": { "project_number": "xxxxxxxxxx", " firebase_url ":" https://projectid.firebaseio.com ", " project_id ":" projectid ", " storage_bucket ":" projectid.appspot.com " } Überprüfen Sie auch andere Parameter in dieser Datei. Versuchen Sie es dann Ihr Code –

+0

Verwenden Sie einen lokalen Server wie Xampp etc oder einen kostenlosen Webhost Wenn Sie eine Nachricht (Benachrichtigung) mit der FCM-Konsole senden können, dann haben Sie die Chance, dass Ihr Android-App-Code kein Problem hat zu Ihrer Server-Datenbank und dem Sc ript, um eine Postanforderung an den FCM-Server zu senden. Ich hatte ein ähnliches Problem und nachdem ich meinen PHP-Code 1000 Mal geändert hatte, benutzte ich meinen XAMPP-Locat-Host und den gleichen Code, der wie Charme funktioniert. Problem war in meinen freien Webhost Server Einstellungen nicht in meinem Code. Vielleicht ist das auch bei Ihnen der Fall;) – Raj

Antwort

0

Ich konnte das Problem beheben. Das Format, in dem ich json generierte, war falsch. Ich habe die Payload nicht unter das Benachrichtigungs-Tag gestellt. Post diese Änderung begann es zu arbeiten. Vielen Dank für all eure Vorschläge.