Tutorials
https://firebase.google.com/docs/cloud-messaging/android/client
Steps:
This tutorial is a continuation of Setting up FCM JS Client
-
Setup Firebase project for Android
- Register your app with Firebase. ie n the center of the project overview page, click the
Android icon
(plat_android) or Add app to launch the setup workflow.
- Register your app with Firebase. ie n the center of the project overview page, click the
-
Set up the SDK
-
Request runtime notification permission on Android 13+
-
Notification permissions for apps targeting Android 12L (API level 32) or lower
-
Optional: remove POST_NOTIFICATIONS permission
-
-
Access the device registration token
-
MyFirebaseMessagingService.java
& MainActivity.java
Next steps
Codes
Add Firebase SDKs to your app
Edit build.gradle
(Module:app)
<project>/<app-module>/build.gradle
dependencies {
// ...
// Import the Firebase BoM
implementation(platform("com.google.firebase:firebase-bom:33.14.0"))
// When using the BoM, you don't specify versions in Firebase library dependencies
// Add the dependency for the Firebase SDK for Google Analytics
implementation("com.google.firebase:firebase-analytics")
// TODO: Add the dependencies for any other Firebase products you want to use
// See https://firebase.google.com/docs/android/setup#available-libraries
// For example, add the dependencies for Firebase Authentication and Cloud Firestore
implementation("com.google.firebase:firebase-auth")
implementation("com.google.firebase:firebase-firestore")
}
Edit your app manifest
<service
android:name=".java.MyFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
Request runtime notification permission on Android 13+
// Declare the launcher at the top of your Activity/Fragment:
private final ActivityResultLauncher<String> requestPermissionLauncher =
registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
if (isGranted) {
// FCM SDK (and your app) can post notifications.
} else {
// TODO: Inform user that that your app will not show notifications.
}
});
private void askNotificationPermission() {
// This is only necessary for API level >= 33 (TIRAMISU)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) ==
PackageManager.PERMISSION_GRANTED) {
// FCM SDK (and your app) can post notifications.
} else if (shouldShowRequestPermissionRationale(Manifest.permission.POST_NOTIFICATIONS)) {
// TODO: display an educational UI explaining to the user the features that will be enabled
// by them granting the POST_NOTIFICATION permission. This UI should provide the user
// "OK" and "No thanks" buttons. If the user selects "OK," directly request the permission.
// If the user selects "No thanks," allow the user to continue without notifications.
} else {
// Directly ask for the permission
requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS);
}
}
}
Optional: remove POST_NOTIFICATIONS permission
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" tools:node="remove"/>
Retrieve the current registration token
FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener(new OnCompleteListener<String>() {
@Override
public void onComplete(@NonNull Task<String> task) {
if (!task.isSuccessful()) {
Log.w(TAG, "Fetching FCM registration token failed", task.getException());
return;
}
// Get new FCM registration token
String token = task.getResult();
// Log and toast
String msg = getString(R.string.msg_token_fmt, token);
Log.d(TAG, msg);
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}
});
Monitor token generation
/**
* There are two scenarios when onNewToken is called:
* 1) When a new token is generated on initial app startup
* 2) Whenever an existing token is changed
* Under #2, there are three scenarios when the existing token is changed:
* A) App is restored to a new device
* B) User uninstalls/reinstalls the app
* C) User clears app data
*/
@Override
public void onNewToken(@NonNull String token) {
Log.d(TAG, "Refreshed token: " + token);
// If you want to send messages to this application instance or
// manage this apps subscriptions on the server side, send the
// FCM registration token to your app server.
sendRegistrationToServer(token);
}
Check for Google Play services
An app needs Google Play Services if it relies on any of the core services provided by Play Services, such as authentication to Google services, location-based services, or access to Google Play Store features. Essentially, if an app utilizes any Google APIs or functionalities, it will need to integrate with Google Play Services to function correctly.
Apps that rely on the Play Services SDK should always check the device for a compatible Google Play services APK before accessing Google Play services features. It is recommended to do this in two places: in the main activity's onCreate() method, and in its onResume() method. The check in onCreate() ensures that the app can't be used without a successful check. The check in onResume() ensures that if the user returns to the running app through some other means, such as through the back button, the check is still performed.
If the device doesn't have a compatible version of Google Play services, your app can call GoogleApiAvailability.makeGooglePlayServicesAvailable()
to allow users to download Google Play services from the Play Store.
Prevent auto initialization
<meta-data
android:name="firebase_messaging_auto_init_enabled"
android:value="false" />
<meta-data
android:name="firebase_analytics_collection_enabled"
android:value="false" />
To re-enable FCM auto-init, make a runtime call:
FirebaseMessaging.getInstance().setAutoInitEnabled(true);
To re-enable Analytics collection, call the setAnalyticsCollectionEnabled() method of the FirebaseAnalytics class. For example:
setAnalyticsCollectionEnabled(true);
|
|