2016-08-09 6 views
3

Я пытаюсь показать уведомление в своем приложении. Я создал приложение на консоли Firebase. Примечание. Ошибок нет. Когда приложение запускается после отправки сообщения из консоли Firebase, ничего не появляется. Что здесь не так?Firebase Cloud Messaging не работает

MyFireBaseInstaceIDService.java

package com.example.hp.mesajlasma; 
import android.util.Log; 
import com.google.firebase.iid.FirebaseInstanceId; 
import com.google.firebase.iid.FirebaseInstanceIdService; 


public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { 

private static final String TAG = "MyFirebaseIIDService"; 

/** 
* Called if InstanceID token is updated. This may occur if the security of 
* the previous token had been compromised. Note that this is called when the InstanceID token 
* is initially generated so this is where you would retrieve the token. 
*/ 
// [START refresh_token] 
@Override 
public void onTokenRefresh() { 
    // Get updated InstanceID token. 
    String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 
    Log.d(TAG, "Refreshed token: " + refreshedToken); 

    // If you want to send messages to this application instance or 
    // manage this apps subscriptions on the server side, send the 
    // Instance ID token to your app server. 
    sendRegistrationToServer(refreshedToken); 
} 
// [END refresh_token] 

/** 
* Persist token to third-party servers. 
* 
* Modify this method to associate the user's FCM InstanceID token with any server-side account 
* maintained by your application. 
* 
* @param token The new token. 
*/ 
private void sendRegistrationToServer(String token) { 
    // TODO: Implement this method to send token to your app server. 
} 
} 

MyFireBaseMessagingService.java

package com.example.hp.mesajlasma; 

import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.media.RingtoneManager; 
import android.net.Uri; 
import android.support.v4.app.NotificationCompat; 
import android.util.Log; 

import com.google.firebase.messaging.FirebaseMessagingService; 
import com.google.firebase.messaging.RemoteMessage; 

/*** Created by Belal on 5/27/2016.*/ 

public class MyFirebaseMessagingService extends FirebaseMessagingService { 

private static final String TAG = "MyFirebaseMsgService"; 

/** 
* Called when message is received. 
* 
* @param remoteMessage Object representing the message received from Firebase Cloud Messaging. 
*/ 
// [START receive_message] 
@Override 
public void onMessageReceived(RemoteMessage remoteMessage) { 
    // [START_EXCLUDE] 
    // There are two types of messages data messages and notification messages. Data messages are handled 
    // here in onMessageReceived whether the app is in the foreground or background. Data messages are the type 
    // traditionally used with GCM. Notification messages are only received here in onMessageReceived when the app 
    // is in the foreground. When the app is in the background an automatically generated notification is displayed. 
    // When the user taps on the notification they are returned to the app. Messages containing both notification 
    // and data payloads are treated as notification messages. The Firebase console always sends notification 
    // messages. For more see: https://firebase.google.com/docs/cloud-messaging/concept-options 
    // [END_EXCLUDE] 

    Log.d(TAG, "From: " + remoteMessage.getFrom()); 

    // Check if message contains a data payload. 
    if (remoteMessage.getData().size() > 0) { 
     Log.d(TAG, "Message data payload: " + remoteMessage.getData()); 
    } 

    // Check if message contains a notification payload. 
    if (remoteMessage.getNotification() != null) { 
     Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); 
    } 

    // Also if you intend on generating your own notifications as a result of a received FCM 
    // message, here is where that should be initiated. See sendNotification method below. 
} 
// [END receive_message] 

/** 
* Create and show a simple notification containing the received FCM message. 
* 
* @param messageBody FCM message body received. 
*/ 
private void sendNotification(String messageBody) { 
    Intent intent = new Intent(this, MainActivity.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, 
      PendingIntent.FLAG_ONE_SHOT); 

    Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
      .setSmallIcon(R.drawable.common_google_signin_btn_icon_dark_focused) 
      .setContentTitle("FCM Message") 
      .setContentText(messageBody) 
      .setAutoCancel(true) 
      .setSound(defaultSoundUri) 
      .setContentIntent(pendingIntent); 

    NotificationManager notificationManager = 
      (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

    notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 
} 
} 

build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules. 


buildscript { 
repositories { 
    jcenter() 
} 
dependencies { 
    classpath 'com.android.tools.build:gradle:2.2.0-alpha5' 
    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 
} 

AndroidManifest

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

<uses-permission android:name="android.permission.INTERNET"/> 


<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <!-- 
     Defining Services 
    --> 
    <service 
     android:name=".MyFirebaseMessagingService"> 
     <intent-filter> 
      <action android:name="com.google.firebase.MESSAGING_EVENT"/> 
     </intent-filter> 
    </service> 

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

</manifest> 

build.gradle (приложение)

apply plugin: 'com.android.application' 

android { 
compileSdkVersion 23 
buildToolsVersion "24.0.0" 
defaultConfig { 
    applicationId "com.example.hp.mesajlasma" 
    minSdkVersion 15 
    targetSdkVersion 23 
    versionCode 1 
    versionName "1.0" 
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 
} 
buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'),   'proguard-rules.pro' 
    } 
} 
} 

dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2',    { 
    exclude group: 'com.android.support', module: 'support-annotations' 
}) 
compile 'com.android.support:appcompat-v7:23.4.0' 
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha5' 
testCompile 'junit:junit:4.12' 
compile 'com.google.firebase:firebase-messaging:9.0.0' 
} 
apply plugin: 'com.google.gms.google-services' 
+0

посмотреть на эту ссылку и принять ответ, если он заработает. Http: // StackOverflow.com/questions/37997957/fcm-not-receive-notifications-when-the-app-is-relaunched/37998202 # 37998202 –

+0

Я добавил разрешение, но оно все еще не работает. это делает меня сумасшедшим ... –

+0

Вы добавили файл 'google-services.json' в свой проект? – Machado

ответ

1

Все файлы выглядит отлично, за исключением MyFireBaseMessaginService.java Сравните это с моим и делать изменения, и он должен работать.

package biz.coolpage.rjabhi.tesstingfcm; 

import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Intent; 
import android.support.v4.app.NotificationCompat; 

import com.google.firebase.messaging.RemoteMessage; 

/** 
* Created by Warrior on 8/8/2016. 
*/ 
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); 
     NotificationCompat.Builder builder=new NotificationCompat.Builder(this) 
       .setAutoCancel(true) 
       .setContentTitle("FCM TITLE").setContentText(message) 
       .setSmallIcon(R.drawable.ic_launcher) 
       .setDefaults(Notification.DEFAULT_ALL) 
       .setContentIntent(pendingIntent); 

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

Кроме того, убедитесь, что вы зарегистрировали ваше приложение FCM console и генерируется googleservices.json после ввода имени пакета вашего приложения.

MainActivity.java

package biz.coolpage.rjabhi.tesstingfcm; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 

import com.google.firebase.iid.FirebaseInstanceId; 
import com.google.firebase.messaging.FirebaseMessaging; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     FirebaseMessaging.getInstance().subscribeToTopic("test"); 
     FirebaseInstanceId.getInstance().getToken(); 
     Log.d("TOKEN",FirebaseInstanceId.getInstance().getToken()); 
    } 
} 

FireBaseInstanceIDService.java

package biz.coolpage.rjabhi.tesstingfcm; 

import android.net.Uri; 
import android.util.Log; 
import android.widget.Toast; 

import com.google.firebase.iid.FirebaseInstanceId; 

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.net.HttpURLConnection; 
import java.net.URL; 

import okhttp3.FormBody; 
import okhttp3.OkHttpClient; 
import okhttp3.Request; 
import okhttp3.RequestBody; 

/** 
* Created by Warrior on 8/8/2016. 
*/ 
public class FirebaseInstanceIDService extends com.google.firebase.iid.FirebaseInstanceIdService 
{ 
    @Override 
    public void onTokenRefresh() { 
     String token= FirebaseInstanceId.getInstance().getToken(); 
     Log.d("GOT TOKEN: ",token); 
     registerToken(token); 
    } 

    private void registerToken(String token) { 
//code to save token 
    } 
} 
+0

, он не работает. Моя MainActivity.java пуста. нет никакого кода. есть ли какой-либо код в файле MainActivity.java? –

+0

проверьте свой логарифм. вы получаете там токен? Похоже, что это всего лишь образец проекта GooGleQuickStart? Если это так, убедитесь, что вы зарегистрировали проект на Консоли FCM и получите свой собственный googleservices.json и вставьте его в каталог приложения проекта – Raj

+0

08-09 17: 13: 20.877 3163-4348/com.example.hp.mesajlasma D/FirebaseInstanceId : фоновая синхронизация не выполнена: MISSING_INSTANCEID_SERVICE, повторите попытку в 160-х годах –

0

сделать простой процесс Firebase уведомления.

Скачать образец кода из ниже ссылке:

https://github.com/firebase/quickstart-android (это 100% рабочий)

Для теста об уведомлении:

Перейти к firebase консоли -> выберите приложение

Выбрать Раздел уведомлений -> Нажмите «Новое сообщение» и добавьте свое сообщение и нажмите «Отправить сообщение».

0

Для настройки FCM, как описано в Set up Firebase and the FCM SDK, первый шаг соответствует add Firebase to your Android project.

Вы можете добавить compile 'com.google.firebase:firebase-core:9.4.0' (, соответствующую ему версию т.е. 9.0, если вы предпочитаете более старую версию, так что нет никакого противоречия, я включил последнюю версию как сейчас), если вы следовали вдоль всех других шагов, чтобы добавить Firebase к вашему приложению.

0

Просто импортируйте сообщения firebase в свой проект. Вам нужно добавить эту строку в файл градиента модуля приложения.

//Add this line firebase 
    compile 'com.google.firebase:firebase-messaging:9.0.0' 
    /
Смежные вопросы