Firebase Cloud Messaging не работает только один раз

Всем привет.
Я практиковал обмен сообщениями FCM, но он не может отправить сообщение.
Я сделал на основе Google Code, и все же я читал его, но сервер не отправляет сообщение и базовая консоль может срабатывать только один раз.
Кто-нибудь может помочь? Вот коды!

Основная деятельность:

public class MainActivity extends AppCompatActivity {

static Context context;
static TextView token;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

context = getApplicationContext();
token = (TextView) findViewById(R.id.token);
}
}

FCMMessagingService

public class FCMMessagingService extends FirebaseMessagingService {

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
String title = remoteMessage.getNotification().getTitle();
String body = remoteMessage.getNotification().getBody();

Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 10, intent, PendingIntent.FLAG_ONE_SHOT);
Notification notificationBuilder = new NotificationCompat.Builder(this)
.setContentTitle(title)
.setContentText(body)
.setSmallIcon(R.mipmap.ic_launcher)
.setAutoCancel(true)
.setContentIntent(pendingIntent)
.build();
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder);super.onMessageReceived(remoteMessage);
}
}

FCMInstanceIdService

public class FCMInstanceIdService extends FirebaseInstanceIdService {

public static final String TOKEN = "token";
@Override
public void onTokenRefresh() {
super.onTokenRefresh();
String token = FirebaseInstanceId.getInstance().getToken();

SharedPreferences sp = getApplicationContext().getSharedPreferences(TOKEN, Context.MODE_PRIVATE);
sp.edit().putString(TOKEN, token).commit();
Log.d("TOKEN_NO: ", token);
}
}

манифест

<service android:name=".FCMInstanceIdService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
</intent-filter>
</service>
<service android:name=".FCMMessagingService">
<intent-filter>
<action android:name="com.google.firabase.MESSAGING_EVENT"/>
</intent-filter>
</service>

Проект. Gradle

buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.3'
classpath 'com.google.gms:google-services:3.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}

allprojects {
repositories {
jcenter()
}
}

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

Модуль .gradle

apply plugin: 'com.android.application'

android {
compileSdkVersion 24
buildToolsVersion "23.0.2"
defaultConfig {
applicationId "hu.penged.cloudmessage"minSdkVersion 14
targetSdkVersion 24
versionCode 1
versionName "1.0"}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.2.0'
compile 'com.google.firebase:firebase-messaging:9.4.0'
}
apply plugin: 'com.google.gms.google-services'

..И server.php …

<?php
$server_key = "AIzaSyA4ahv6z05t4sbSOZDkw5pX-5EvOHA7zfA";
$adress = "enI7T1-U69o:APA91bHLnlAOJxg8kebr7GcpoVqBf__EHXADofEG-rQiGH60fH3HstCk9BroxoBXjlFEzKJoln-ghATjlcyo4UiCmyDjTeKOKG7NHY1ADiwWxxhg3tvBdWc2J_PbMM0wzKjjpDpgDk6x";
$fcm_server_url = "https://fcm.googleapis.com/fcm/send";

$title = utf8_encode("Notification Test");
$content_text = utf8_encode("Notification message.");

$httpheared = array("Content-Type:application/json", "Authorization:key=".$server_key);

$post_content = array("to" => $adress, "notification" => array("title" => $title, "body" => $content-text));

$curl_connection = curl_init();
curl_setopt($curl_connection, CURLOPT_URL, $fcm_server_url);
curl_setopt($curl_connection, CURLOPT_POST, true);
curl_setopt($curl_connection, CURLOPT_HTTPHEADER, $httpheared);
curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl_connection, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);
curl_setopt($curl_connection, CURLOPT_POSTFIELDS, json_encode($post_content));
$valasz = curl_exec($curl_connection);
curl_close($curl_connection);

echo $valasz;
?>

Большое спасибо за Вашу помощь!!!

0

Решение

Попробуйте сделать следующее:
В вашем скрипте server.php вместо notification использование param data, Так будет: "data" => array("title" => $title, "body" => $content-text) И в твоем onMessageReceived Метод получения параметра с помощью: remoteMessage.getData().get("title"); и тот же код для другого параметра с ключом «тело».

Также проверьте, вызывается ли ваш метод onMessageReceived, когда мобильное устройство получает уведомление.

Надеюсь это поможет!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]