1

Я пытаюсь реализовать FCM в своем приложении. Прямо сейчас, я могу получать сообщения, когда отправляю их из консоли приложений firebase. Но когда я пытаюсь отправить сообщения с моего сервера, сообщение не доставляется на телефон. Тем не менее, я получаю статус успеха после отправки сообщения с сервера, и он показывает, что он доставлен на 1 устройство. Любая помощь будет оценена по достоинству.Сообщения FCM, не достигшие устройства при отправке с сервера

Спасибо.

манифеста Файл:

</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 приложение: Проект

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:

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 
} 

Код:

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 Код:

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

Разместите код/​​logcat.You должен дать больше информации –

+0

пожалуйста, убедитесь, что вы добавили это ** Google-сервисы ** файл и содержит firebase URL 'project_info ": { " project_number": "XXXXXXXXXX", " firebase_url ":" https://projectid.firebaseio.com ", " project_id ":" projectid ", " storage_bucket ":" projectid.appspot.com " }' также проверить другие параметры в этом файле. ваш код. –

+0

Используете ли вы локальный сервер, например Xampp и т. д. или любой бесплатный веб-хостинг? Если вы можете отправить сообщение (уведомление) с помощью консоли FCM, то есть много шансов на то, что ваш код приложения для Android не имеет проблем. Опубликуйте свои php-скрипты для регистрации токенов к вашей базе данных сервера и к Sc ript для отправки почтового запроса на сервер FCM. У меня была схожая проблема. После изменения моего php-кода 1000 раз я использовал хост локатора XAMPP и тот же код, который работал как шарм. Проблема была в моих бесплатных настройках веб-хоста, не в моем коде. Может быть, это и дело с вами;) – Raj

ответ

0

Я был в состоянии решить эту проблему. Формат, в котором я генерировал json, был неправильным. Я не помещал полезную нагрузку под тегом уведомления. Опубликуйте это изменение, и он начал работать. Большое спасибо, ребята, за все ваши предложения.

Смежные вопросы