В этом посте рассказывается, как отправлять push-уведомления в Android. Раньше нас использовали для отправки push-уведомлений в Android с помощью службы сообщений Google Cloud. Недавно был представлен новый способ отправки push-данных с использованием Firebase. Даже если основные принципы остаются прежними, Firebase представила некоторые интересные новые функции. Firebase поддерживает другие сервисы, такие как:
- Аутентификация
- Удаленная настройка
- Отчет о сбое
В этом посте шаг за шагом будет рассказано, как отправить push-уведомление из консоли Firebase в приложение.
Что такое push-уведомление?
Прежде чем углубляться в детали того, как отправлять уведомления в Android, полезно уточнить, что такое push-уведомление. Используя push-уведомление Android, наше приложение может уведомлять пользователя о новых событиях. Это происходит, даже если наше приложение не работает на переднем плане. Используя этот сервис, мы можем отправлять данные с нашего сервера в наше приложение всякий раз, когда происходит новое событие. Эта парадигма гораздо более эффективна, если вы продолжаете подключаться к серверу (метод pull), чтобы узнать, есть ли новые события.
Используя push-уведомления, мы можем держать пользователя в курсе событий, не разряжая аккумулятор смартфона. Когда пользователь получает уведомление, оно отображается в виде пользовательского значка в строке состояния. При отправке push-уведомления используются разные парадигмы:
Сообщение на одно устройство
Сообщение в теме (отправка одного и того же сообщения на несколько устройств, подписанных на определенную тему. Это реализует модель издатель / подписчики)
Сообщение группе (несколько устройств, использующих один и тот же ключ, который используется для идентификации смартфона)
Настроить проект облачных сообщений Firebase
Время начинать! Создайте учетную запись для доступа к консоли Firebase и определите проект:
а потом:
Как только вы создали свой проект, вы должны добавить имя пакета вашего приложения. Будьте внимательны, используя одно и то же имя пакета в Android Studio и в консоли Firebase:
В конце этого процесса ваш проект настроен на Firebase, и вы готовы разработать приложение для Android. В конце вы получите файл json, который вам нужно скопировать на уровне модуля приложения.
Как реализовать push-уведомление Android с Firebase
Теперь мы можем разработать приложение для Android, интегрированное с Firebase. В качестве первого шага мы должны добавить Firebase в наше приложение и изменить файлы Gradle. На уровне проекта давайте изменим Gradle Fille как:
1
2
3
4
5
6
7
8
9
|
buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:2.1.3' classpath 'com.google.gms:google-services:3.0.0' } } |
и в имени модуля (обычно с именем app):
1
2
3
4
5
6
7
8
9
|
.... 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' |
В этом случае мы добавили зависимость обмена сообщениями. После настройки файлов Gradle следующим шагом будет создание нашего приложения. В MainActivity
мы добавляем кнопку для получения текущего token
. Этот токен важен, потому что мы используем его в консоли Firebase, чтобы установить правильное целевое устройство.
Предположим, мы уже определили макет, содержащий кнопку, в классе Activity:
01
02
03
04
05
06
07
08
09
10
11
|
Button btn = (Button) findViewById(R.id.btn); btn.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { String tkn = FirebaseInstanceId.getInstance().getToken(); Toast.makeText(MainActivity. this , "Current token [" +tkn+ "]" , Toast.LENGTH_LONG).show(); Log.d( "App" , "Token [" +tkn+ "]" ); } }); } |
Обратите внимание, что мы использовали синглтон FirebaseInstanceId, чтобы получить текущий экземпляр, а затем текущий токен. Может потребоваться некоторое время, прежде чем токен будет сгенерирован, поэтому вы можете получить нулевое значение в начале.
Более того, мы можем отслеживать процесс создания токена и получать уведомления, когда он доступен, используя пользовательский сервис, расширяющий FirebaseInstanceIdService . В этом случае мы переопределяем метод onTokenRefresh
.
1
2
3
4
5
6
7
8
|
public class FireIDService extends FirebaseInstanceIdService { @Override public void onTokenRefresh() { String tkn = FirebaseInstanceId.getInstance().getToken(); Log.d( "Not" , "Token [" +tkn+ "]" ); } } |
В этом методе мы просто регистрируем токен, но его можно использовать в реальном приложении для отправки токена на сервер, чтобы сервер его сохранял.
Не забудьте объявить этот сервис в Manifest.xml
.
1
2
3
4
5
6
7
|
.. < service android:name = ".FireIDService" > < intent-filter > < action android:name = "com.google.firebase.INSTANCE_ID_EVENT" /> </ intent-filter > </ service > |
В конце мы реализуем сервис, который обрабатывает входящие push-уведомления:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
public class FireMsgService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { super .onMessageReceived(remoteMessage); Log.d( "Msg" , "Message received [" +remoteMessage+ "]" ); // Create Notification Intent intent = new Intent( this , MainActivity. class ); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity( this , 1410 , intent, PendingIntent.FLAG_ONE_SHOT); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder( this ) .setSmallIcon(R.drawable.ic_stat_name) .setContentTitle( "Message" ) .setContentText(remoteMessage.getNotification().getBody()) .setAutoCancel( true ) .setContentIntent(pendingIntent); } } |
В методе onMessageReceived
мы просто показываем уведомление, содержащее отправленное сообщение.
Запустив приложение, мы получим результат, показанный на видео ниже:
В конце этой статьи вы узнали, как использовать push-уведомления в Android с Firebase.
Ссылка: | Push-уведомление в Android с помощью облачных сообщений Firebase от нашего партнера JCG Франческо Аццолы в блоге Surviving w / Android . |