I want to create a simple notification function in my application. I followed this YouTube video and both the Firebase 1 and 2 documentation docs as well as the Firebase tool assistant in Android Studio (which says I'm connected to Firebase). For some reason, following these steps and the documents in my older application (which code is listed below), it will not allow me to receive notifications. However, if I follow the same steps in a completely new application, it works fine. I tested both applications on the same physical device and in the background, in active and completed states. Every time a new demo application created by me works without problems, but my old application that I want to receive does not work. Both are tested without obtaining a device identifier. I don't even get any error logs or TAG logs. I think one of my compiled projects is interfering, not exactly what, but I might have to look there.
I also checked all these SO posts: 1 2 3 or more
PS. I removed the name of my package below, I checked FireBase several times, and they match, so I know this is not a problem. However, my new FireBase demo application shows that my application is connected, but my old FireBase application did not. Also, I set the bounty before and still faced the same problem.
Here is my problematic code:
Notification.java (its service, as in the documentation)
public class Notification extends FirebaseMessagingService { public Notification() { } @Override public void onMessageReceived(RemoteMessage remoteMessage) { showNotification(remoteMessage.getData().get("message")); Log.d("FMC", "Message Notification Body: " + remoteMessage.getNotification().getBody()); } private void showNotification(String message) { Intent i=new Intent(this, SplashScreen.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.pt_icon) .setDefaults(android.app.Notification.DEFAULT_ALL) .setContentIntent(pendingIntent); NotificationManager notificationManager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notificationManager.notify(0,builder.build()); } }
Note that I did not even receive the log in the .java notification above.
Project.gradle
buildscript { repositories { jcenter() maven { url 'https://maven.google.com/' name 'Google' } } dependencies { classpath 'com.android.tools.build:gradle:3.0.1' classpath 'com.google.gms:google-services:3.2.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() maven { url "https://jitpack.io" } maven { url 'https://maven.google.com' } google() } } task clean(type: Delete) { delete rootProject.buildDir }
app.gradle
apply plugin: 'com.android.application' android { compileSdkVersion 26 defaultConfig { minSdkVersion 16 targetSdkVersion 26 versionCode 16 versionName "2.6" } dexOptions { jumboMode = true } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } //Code below is added to fix random error ("Fix the issues identified by lint") lintOptions { abortOnError false } productFlavors { } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') //compile project(path: ':backend', configuration: 'android-endpoints') //Removed the 0.2.+ compile 'com.daprlabs.aaron:cardstack:0.3.1-beta0' //noinspection GradleCompatible compile 'com.android.support:appcompat-v7:25.4.0' compile "com.android.support:appcompat-v7:19.0.+" compile 'com.android.support:design:23.4.0' compile 'com.android.support:recyclerview-v7:23.4.0' compile 'com.android.support:cardview-v7:23.4.0' compile 'com.github.danylovolokh:video-player-manager:0.2.0' compile 'com.github.danylovolokh:list-visibility-utils:0.2.0' implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.google.firebase:firebase-messaging:11.8.0' compile 'com.google.firebase:firebase-core:11.8.0' compile 'com.orhanobut:dialogplus: 1.11@aar ' compile 'com.nineoldandroids:library:2.4.0' compile files('libs/sinch-android-rtc-3.9.14.jar') compile 'com.amazonaws:aws-android-sdk-s3:2.4.4' compile 'com.github.chrisbanes:PhotoView:1.2.6' compile 'com.davemorrissey.labs:subsampling-scale-image-view:3.5.0' compile 'com.github.amlcurran.showcaseview:library:5.4.3' compile 'com.github.d-max:spots-dialog: 0.7@aar ' compile 'com.victor:lib:1.0.4' compile 'com.github.bumptech.glide:glide:3.5.2' compile 'com.squareup.picasso:picasso:2.5.2' compile 'com.android.support:recyclerview-v7:23.0.0' compile 'me.grantland:autofittextview:0.2.0' compile 'com.wang.avi:library:1.0.5' compile 'com.nineoldandroids:library:2.4.0' compile 'com.braintreepayments.api:drop-in:2.3.8' compile 'com.braintreepayments.api:braintree:2.3.9' compile 'com.loopj.android:android-async-http:1.4.9' compile 'com.getbase:floatingactionbutton:1.10.1' compile 'com.mxn.soul:flowingdrawer-core:1.2.2' compile 'com.github.rengwuxian:MaterialEditText:2.1.4' compile 'com.github.PhilJay:MPAndroidChart:v3.0.1' compile 'net.gotev:uploadservice:3.2.5' compile 'in.srain.cube:ultra-ptr:1.0.11' compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha9' testCompile 'junit:junit:4.12' //implementation 'com.android.support:appcompat-v4:23.+' } apply plugin: 'com.google.gms.google-services'
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"> <uses-feature android:name="android.hardware.microphone" android:required="false" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <grant-uri-permission android:path="string" android:pathPattern="string" android:pathPrefix="string" /> <application android:allowBackup="true" android:icon="@mipmap/_icon" android:label="" android:supportsRtl="true" android:theme="@style/Theme.AppCompat.Light.NoActionBar" tools:node="replace"> <activity android:name=".SplashScreen"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".Notification"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service> <activity android:name=".SignInForm" /> <activity android:name=".SignUpPage" /> <activity android:name=".SellerFillOutForm" /> <activity android:name=".BuyerFillOutForm" /> <activity android:name=".BuyerHomePage" android:label="@string/title_activity_buyer_home_page" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="http" /> <activity android:name=".VideoPlayerActivity" /> <activity android:name=".BackgroundTask" /> <service android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService" android:enabled="true" /> <activity android:name=".EnterCreditCard" /> <activity android:name=".PickMeeting" /> <activity android:name=".HowBillingWorks" /> <activity android:name=".ReBillingPlan" /> <activity android:name=".PayBill" /> <activity android:name=".Buyer_Home_Page" android:configChanges="locale|orientation" /> <activity android:name=".Seller_Home_Page" /> <activity android:name=".ProductList" /> <activity android:name=".EditProduct" /> <activity android:name=".EditSellerAccount" /> <activity android:name=".EditBuyerAccount" /> <activity android:name=".Video_Calling.incomingVideoCall" /> <activity android:name=".Video_Calling.CallScreenActivity" /> <activity android:name=".SellerAnalytics" /> <activity android:name=".Swipe_Layout.SwipeLayout" /> <activity android:name=".Swipe_Layout.PopUpActivity" /> </application> </manifest>
The working code is below (the application I made to check my steps and works 100%):
Notifaction.java
import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.support.v4.app.NotificationCompat; import android.util.Log; import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage; import static android.content.ContentValues.TAG; public class Notifaction extends FirebaseMessagingService { public Notifaction() { } @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_background) .setDefaults(Notification.DEFAULT_ALL) .setContentIntent(pendingIntent); NotificationManager notificationManager= (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notificationManager.notify(0,builder.build()); } }
AndroidManiest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package=""> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" 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> <service android:name=".Notifaction"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> </application> </manifest>
app.gradle
apply plugin: 'com.android.application' android { compileSdkVersion 26 defaultConfig { applicationId "" minSdkVersion 14 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.google.firebase:firebase-messaging:11.8.0' compile 'com.google.firebase:firebase-core:11.8.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' } apply plugin: 'com.google.gms.google-services'
Project.grdle
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.0.1' classpath 'com.google.gms:google-services:3.2.0' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() } } task clean(type: Delete) { delete rootProject.buildDir }
In addition, I added a .json file for both projects. Here is a screenshot:
.