To write your Firebase Cloud Messaging Android client app, use the
FirebaseMessaging
API and
Android Studio 1.4 or higher with Gradle. The instructions in this page
assume that you have completed the steps for
adding Firebase to your Android project.
FCM clients require devices running Android 2.3 or higher that also have the Google Play Store app installed, or an emulator running Android 2.3 with Google APIs. Note that you are not limited to deploying your Android apps through Google Play Store.
Set up Firebase and the FCM SDK
-
If you haven't already, add Firebase to your Android project.
-
In Android Studio, add the FCM dependency to your app-level build.gradle file:
dependencies { compile 'com.google.firebase:firebase-messaging:9.6.1' }
Edit your app manifest
Add the following to your app's manifest:
- A service that extends
FirebaseMessagingService
. This is required if you want to do any message handling beyond receiving notifications on apps in the background. To receive notifications in foregrounded apps, to receive data payload, to send upstream messages, and so on, you must extend this service.
<service android:name=".MyFirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service>
FirebaseInstanceIdService
to handle the creation,
rotation, and updating of registration tokens. This is required for sending
to specific devices or for creating device groups.<service android:name=".MyFirebaseInstanceIDService"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> </intent-filter> </service>
minSdkVersion 8
or higher in the app's build.gradle
. This
ensures that the Android app cannot be installed in an environment in which it
could not run properly. Access the device registration token
On initial startup of your app, the FCM SDK generates a registration
token for the client app instance. If you want to target single devices or
create device groups, you'll need to access this token by extending
FirebaseInstanceIdService
.
This section describes how to retrieve the token and how to monitor changes to the token. Because the token could be rotated after initial startup, you are strongly recommended to retrieve the latest updated registration token.
The registration token may change when:
- The app deletes Instance ID
- The app is restored on a new device
- The user uninstalls/reinstall the app
- The user clears app data.
Retrieve the current registration token
When you need to retrieve the current token, call
FirebaseInstanceID.getToken()
.
This method returns null if the token has not yet been generated.
Monitor token generation
The onTokenRefresh
callback fires whenever a new token is
generated, so calling
getToken
in its context ensures that you are accessing a current, available
registration token. Make sure you have added the service to your
manifest,
then call getToken
in the context of onTokenRefresh
, and log the value as shown:
@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); }
After you've obtained the token, you can send it to your app server and store it using your preferred method. See the Instance ID API reference for full detail on the API.
Check for Google Play services
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.
Next steps
Once the client app is set up, you are ready to start sending downstream messages with the Firebase console and sending topic messages with Firebase console. This functionality is demonstrated in the quickstart sample, which you can download, run, and review.
To add other, more advanced behavior to your app, you can declare an intent filter and implement an activity to respond to incoming messages. For details, see the guides for sending messages from an app server:
Keep in mind that you'll need a server implementation to take advantage of these features.