Android로 Firebase 푸시 알림을 보내는 방법

PubNub Developer Relations - Mar 12 - - Dev Community

모바일 애플리케이션을 만들 때 사용자에게 알림이나 푸시 알림으로 알릴 필요가 없는 사용 사례를 생각하기는 어렵습니다.

더 자세히 알아보기 전에 안드로이드를 위한 푸시 알림 전용 데모와 튜토리얼도 준비되어 있습니다.

예를 들어 다음 시나리오를 고려해 보겠습니다: 경기 중 사용자에게 중요한 뉴스를 제공하는 실시간 스포츠 애플리케이션을 개발하고 있습니다. 이 앱의 핵심 기능은 사용자가 좋아하는 팀이 득점하는 즉시 사용자에게 안정적인 모바일 푸시 알림을 보내는 것입니다.

각 모바일 운영 체제는 네이티브 애플리케이션 푸시 알림을 위한 자체 솔루션을 제공하므로 앱에 통합하기가 까다로울 수 있습니다. Android에서 네이티브 애플리케이션이 푸시 알림에 사용하는 메커니즘은 Firebase 클라우드 메시징 (FCM) 알림입니다. 펍넙은 FCM을 한 단계 더 발전시켜 파이어베이스 클라우드 메시징 알림을 펍넙 실시간 커뮤니케이션 플랫폼에 통합했습니다.

앱이 포그라운드에 있을 때 PubNub의 채널은 실시간 데이터 스트림을 제공하는 데 큰 역할을 합니다. 앱이 백그라운드에 있을 때, 사용자가 휴대폰을 잠그고 있을 때, 특히 사용자가 WiFi 또는 LTE를 통해 간헐적으로 인터넷 연결에 액세스할 때 까다로운 경우가 발생합니다. 이러한 까다로운 경우에 대처하기 위한 가장 쉬운 해결책은 Firebase 푸시 알림을 구현하는 것입니다.

FCM을 사용하여 Android로 Firebase 푸시 알림을 보내는 방법에 대한 개요

FCM은 사용자가 무료로 파이어베이스 푸시 알림을 안정적으로 전송할 수 있는 Google의 무료 서비스입니다.

FCM을 사용하여 앱에 두 가지 유형의 메시지를 보낼 수 있습니다:

  • 알림 메시지는"디스플레이 메시지"라고도 합니다. 이는 FCM SDK에서 자동으로 처리됩니다.
  • 데이터 메시지는 클라이언트 앱에서 처리합니다.
  • 알림 메시지에는 미리 정의된 사용자 표시 키 세트가 포함되며 선택적 데이터 페이로드를 포함할 수 있습니다.
  • 데이터 메시지에는 사용자가 정의한 사용자 지정 키-값 쌍만 포함됩니다.
  • 두 메시지 유형의 최대 페이로드는 4KB입니다.

데이터 메시지, 알림 메시지 또는 둘 다 보낼 수 있지만 푸시 알림 표시를 명시적으로 담당하는 코드가 있으므로 데이터 메시지만 보내도 상관없습니다. 알림 메시지는 FCM에서 자동으로 처리하여 알림 페이로드를 표시합니다.

클라이언트 앱을 대신하여 알림 표시를 처리하려면 알림 메시지를 사용해야 하며, 클라이언트 앱에서 메시지를 처리하려면 데이터 메시지를 사용해야 합니다. 선택적 데이터 페이로드를 포함한 알림 메시지를 보내면 클라이언트 앱이 데이터 페이로드를 처리하는 동안 FCM이 알림 페이로드 표시를 처리합니다.

FCM 시스템은 3자를 고려합니다:

  • 클라이언트 애플리케이션.
  • Google의 FCM 서버(백엔드)
  • 타사 푸시 서버.

사용자가 애플리케이션을 설치할 때 FCM을 사용하려면 애플리케이션이 스스로 등록해야 합니다. 다음은 알림을 보내기 위한 FCM 워크플로입니다:

  • 타사 푸시 서버가 푸시 알림을 Google의 FCM 서버로 전송합니다. 이 부분은 PubNub이 대체하고 간소화할 수 있는 부분입니다.
  • 이 서버는 등록된 모든 모바일 애플리케이션에 메시지를 전달합니다.
  • 메시지는 오프라인 상태인 기기에 대해 저장됩니다.
  • 디바이스가 다시 온라인 상태가 되면 FCM 서버는 대기 중인 메시지를 전달합니다.
  • 메시지는 사용자의 디바이스에서 수신되어 플랫폼별 구현에 따라 표시됩니다.

PubNub를 사용하여 Android에 Firebase 푸시 알림을 보내는 방법

PubNub 실시간 메시징을 사용 중이라면 이미 모든 디바이스와 실시간으로 소통하고 있지만, 기본 Android 환경에 푸시 알림을 보내려면 FCM이 훌륭한 지원군이 될 수 있습니다.Mobile Push Notification Powered By PubNub

애플리케이션이 여러 플랫폼을 대상으로 하는 경우 PubNub는 Apple 푸시 알림 서비스(APN)와 Firebase를 기본적으로 지원하므로 더욱 간편하게 사용할 수 있습니다. 아직 여러 플랫폼을 지원하지 않더라도 FCM에 대한 PubNub 지원을 사용하면 PubNub 데이터 스트림과 Firebase 알림을 위한 단일 라이브러리 세트를 사용하여 코드를 간소화할 수 있습니다.

PubNub는 FCM과 쉽게 통합할 수 있습니다. PubNub 채널은 이러한 알림을 Google의 FCM 서버로 전송하는 타사 서버를 대체합니다. 등록된 모든 엔드포인트가 연결된 디바이스에 푸시 알림을 보내도록 할 수 있습니다.

이를 통해 애플리케이션은 특정 채널에 등록된 디바이스에 푸시 알림을 즉시 전송할 수 있습니다. 이 기능은 Google의 기본 Android 알림 API와 PubNub의 실시간 데이터 스트림 네트워크를 결합합니다. 실시간 푸시 알림은 모든 Android 디바이스에서 기본적으로 이해됩니다. 이미 애플리케이션에 FCM이 있고 PubNub 사용을 고려하고 있다면 앱에서 코드를 제거할 필요 없이 거의 아무것도 변경할 필요가 없습니다!

스포츠 뉴스 앱 시나리오로 돌아가서, 스포츠 평론가가 자신의 휴대폰에서 실시간으로 점수를 전송하고 나머지 시청자의 디바이스에 푸시 알림을 트리거하도록 할 수 있습니다. PubNub를 사용하면 추가 서버를 운영할 필요가 없으며 PubNub에서 자동 확장을 관리하기 때문에 간단합니다!

Firebase 클라우드 메시징(FCM)은 Google 클라우드 메시징(GCM)의 리브랜딩이며 PubNub에서 이를 처리하는 데 기능적인 차이는 없습니다. GCM에 대한 참조가 표시되는 경우 FCM을 대신 사용해야 합니다.

PubNub로 Firebase 푸시 알림 시작하기

완성된 Firebase 푸시 알림 프로젝트를 다운로드하고 싶으신가요? https://github.com/PubNubDevelopers/Android-Push-Notifications

이 튜토리얼에서는 새 안드로이드 앱을 만들고, 파이어베이스 푸시 알림을 설정하고, PubNub 모바일 푸시 알림을 활성화하고, 모바일 푸시 알림을 수신하도록 PubNub 안드로이드 SDK를 구성합니다. 먼저항상 무료인 PubNub 계정에 가입해야 합니다. 가입한 후 새 앱을 만든 다음 PubNub 관리자 대시보드에서 고유한 PubNub 키를 받습니다. 나중에 사용할 수 있도록 게시 키와 구독 키를 기록해 두세요.

새 안드로이드 앱 만들기

FCM 및 PubNub과 함께 사용하려는 앱이 이미 있는 경우 이 섹션을 건너뛰세요.

Java SE 개발 키트(JDK 8 이상)를 설치합니다.

Android Studio를 다운로드하여 설치합니다.

안드로이드 스튜디오 시작 창에서 '새 안드로이드 스튜디오 프로젝트 시작'을 클릭합니다.

애플리케이션 이름, 회사 도메인을 설정하고 프로젝트 위치를 변경할 수 있습니다. Kotlin 또는 Flutter 앱을 작성하려는 경우 해당 확인란을 선택합니다. 나중에 필요하므로 패키지 이름을 메모해 두세요. 다른 옵션은 그대로 둡니다. "다음"을 클릭합니다.

Create New Android App

최소 SDK를 "API23: 안드로이드 6.0(매시멜로)"로 설정합니다. "다음"을 클릭합니다.

"활동 비우기"를 선택합니다. "다음"을 클릭합니다. 기본값을 유지하고 "마침"을 클릭합니다.

실시간 알림을 구축하기 위해 Firebase 클라우드 메시징 추가하기

Firebase 계정을 만들거나 로그인합니다.

Firebase 콘솔에서 '프로젝트 추가'를 클릭하여 Firebase 프로젝트를 만듭니다.

Add Project to Firebase

프로젝트 이름과 위치를 설정합니다.

Add a project to firebase

그런 다음 안드로이드 앱에 파이어베이스를 추가합니다.

Add Firebase to App

앱의 패키지 이름과 닉네임을 입력합니다. 앱의 패키지 이름은 "android/app/src/main/java/com/[YourAppName]/MainApplication.java"의 상단에서 찾을 수 있습니다. SHA-1은 생략합니다(이 튜토리얼에서는 필요하지 않음). "앱 등록"을 클릭합니다.

안드로이드 앱 모듈 루트 디렉토리에 google-services.json 파일을 다운로드합니다. Firebase SDK를 추가하지 마십시오. Firebase 콘솔로 건너뛰고 이 튜토리얼의 단계를 계속 진행하여 앱에 Firebase SDK 및 PubNub SDK를 추가합니다.

Download Config File For Android App

PubNub 관리자 대시보드로 이동하여 앱을 선택한 다음 키 세트를 선택합니다.

"모바일 푸시 알림"까지 아래로 스크롤하여 푸시 알림 애드온을 활성화 (아직 활성화하지 않은 경우)한 다음 방금 만든 앱의 API 키를 Firebase 콘솔에 입력합니다. 왼쪽 사이드바의 "프로젝트 개요"로 이동하여 앱의 지표 오른쪽 상단에 있는 케밥 메뉴 버튼("⋮")을 클릭하고 "설정"을 클릭한 다음 "클라우드 메시징" 탭을 선택하면 API 키(Firebase 콘솔에서 서버 키로 표시됨)를 찾을 수 있습니다.

Firebase 모바일 푸시 알림을 위한 FCM 및 PubNub 구성하기

프로젝트 수준의 build.gradle(/build.gradle) 파일을 편집하고 다음 줄을 추가합니다:

buildscript {
  dependencies {
    // Add this line
    classpath 'com.google.gms:google-services:4.0.1'
  }
}
Enter fullscreen mode Exit fullscreen mode

이 줄을 추가하면 프로젝트를 동기화하라는 노란색 메시지가 표시됩니다. 지금은 무시하세요.

앱 수준의 build.gradle(<프로젝트>/<앱 모듈>/build.gradle) 파일을 편집하고 다음을 추가합니다:

dependencies {
  // Add this line.
  implementation 'com.google.firebase:firebase-core:16.0.1'
  // Firebase Messaging library for sending push notifications. Add this line.
  implementation 'com.google.firebase:firebase-messaging:17.3.3'
  // PubNub Android SDK. Add this line.
  implementation group: 'com.pubnub', name: 'pubnub-gson', version: '4.20.0'
}
...
// Add to the bottom of the file
apply plugin: 'com.google.gms.google-services'
Enter fullscreen mode Exit fullscreen mode

Android Studio에 표시되는 표시줄에서 "지금 동기화"를 클릭합니다.

Android Studio Sync Message

MainActivity.java 파일을 편집하여 PubNub 안드로이드 SDK를 초기화합니다. 또한 푸시 알림을 표시하려면 Android API 레벨 26 이상용 알림 채널을 만들어야 합니다.

package com.pubnub.hellopush;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import com.pubnub.api.PNConfiguration;
import com.pubnub.api.PubNub;
public class MainActivity extends AppCompatActivity {
    public static PubNub pubnub; // PubNub instance
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initPubnub();
        createChannel();
    }
    // Creates PubNub instance with your PubNub credentials. https://admin.pubnub.com/signup
    // This instance will be used when we need to create connection to PubNub.
    private void initPubnub() {
        PNConfiguration pnConfiguration = new PNConfiguration();
        pnConfiguration.setPublishKey("YOUR_PUB_KEY_HERE");
        pnConfiguration.setSubscribeKey("YOUR_SUB_KEY_HERE");
        pnConfiguration.setSecure(true);
        pubnub = new PubNub(pnConfiguration);
    }
    // Creates notification channel.
    private void createChannel() {
        // Notification channel should only be created for devices running Android API level 26+. 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            NotificationChannel chan1 = new NotificationChannel(
                    "default",
                    "default",
                    NotificationManager.IMPORTANCE_NONE);
            chan1.setLightColor(Color.TRANSPARENT);
            chan1.setLockscreenVisibility(Notification.VISIBILITY_SECRET);
            notificationManager.createNotificationChannel(chan1);
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

펍넙 관리자 대시보드에서 고유한 펍넙 키를 가져옵니다. 펍넙 관리자 대시보드에서"YOUR_PUB_KEY_HERE" 및 "YOUR_SUB_KEY_HERE"를 여러분의 키로 바꿉니다.

디바이스 토큰을 가져오는 서비스와 토큰을 등록 서버(PubNub)로 전송하는 메소드를 추가해야 합니다. PubNub 안드로이드 SDK를 사용하여 채널을 등록 토큰에 연결합니다. 포그라운드에서 데이터 메시지를 처리하거나 알림 메시지 표시를 처리할 수 있도록 하려면 FirebaseMessagingService를 확장하는 서비스도 추가해야 합니다.

프로젝트 탐색기에서 "앱 > 자바 > [패키지 이름]" 디렉터리를 확장합니다. 그런 다음 마우스 오른쪽 버튼을 클릭하고 "새로 만들기 > 자바 클래스"를 선택합니다. 클래스 이름을 "MyFirebaseMessageService.Java"로 지정합니다.

package com.pubnub.hellopush;
import android.util.Log;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import com.pubnub.api.callbacks.PNCallback;
import com.pubnub.api.enums.PNPushType;
import com.pubnub.api.models.consumer.PNStatus;
import com.pubnub.api.models.consumer.push.PNPushAddChannelResult;
import java.util.Arrays;
public class MyFirebaseMessagingService extends FirebaseMessagingService {
    private static final String TAG = "FirebaseService";
    @Override
    public void onNewToken(String token) {
        super.onNewToken(token);
        Log.d(TAG,"NEW_TOKEN: "+token);
        sendRegistrationToPubNub(token);
    }
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        // If the application is in the foreground handle or display both data and notification FCM messages here.
        // Here is where you can display your own notifications built from a received FCM message.
        super.onMessageReceived(remoteMessage);
        Log.d(TAG, "From: " + remoteMessage.getFrom());
        if (remoteMessage.getData().size() > 0) {
            Log.d(TAG, "Message data payload: " + remoteMessage.getData());
        }
        if (remoteMessage.getNotification() != null) {
            Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
        }
        // displayNotification(remoteMessage.getNotification().getBody());
    }
    private void sendRegistrationToPubNub(String token) {
        // Configure PubNub mobile push notifications.
        MainActivity.pubnub.addPushNotificationsOnChannels()
            .pushType(PNPushType.GCM)
            .channels(Arrays.asList("HelloPush", "TestPushChannel"))
            .deviceId(token)
            .async(new PNCallback<PNPushAddChannelResult>() {
                @Override
                public void onResponse(PNPushAddChannelResult result, PNStatus status) {
                    Log.d("PUBNUB", "-->PNStatus.getStatusCode = " + status.getStatusCode());
                }
            });
    }
}
Enter fullscreen mode Exit fullscreen mode

AndroidManifest.xml 파일에 클래스를 추가합니다.

<service android:name=".MyFirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>
Enter fullscreen mode Exit fullscreen mode

AndroidManifest.xml 파일에서 <application> 태그 앞에 이러한 권한을 추가합니다.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
Enter fullscreen mode Exit fullscreen mode

PubNub에서 모바일 푸시 알림 보내기

안드로이드 기기 또는 안드로이드 에뮬레이터에서 앱을 빌드하고 실행합니다.

디바이스를 추가한 채널에 메시지를 게시하여 PubNub로 모바일 푸시 알림을 보낼 수 있습니다. 한 가지 중요한 점은 디바이스가 해당 채널에 대한 알림을 받기 위해 채널을 구독할 필요는 없다는 것입니다. 디바이스는 푸시 알림을 위해 채널에 등록하기만 하면 해당 디바이스 유형에 대한 푸시 알림 키가 있는 모든 메시지에 대한 푸시 알림을 받게 됩니다.

PubNub Debug Client

  • 연결된 FCM 디바이스는 pn_gcm 키 내의 데이터만 수신합니다.
  • 기본 PubNub 구독자는 알림 키를 포함한 전체 객체 리터럴을 받게 됩니다.

이 튜토리얼에서는 장치를 "알림" 채널에 등록했습니다. 해당 채널에 pn_gcm 키로 전송된 모든 메시지는 등록된 디바이스로 모바일 푸시 알림으로 전송됩니다.

모바일 푸시 알림을 테스트하는 가장 쉬운 방법은 펍넙 관리자 대시보드 내의 펍넙 디버그 콘솔에서 푸시 알림을 보내는 것입니다.

펍넙 관리자 대시보드로 이동하여 앱을 선택한 다음 키 세트를 선택합니다.

"디버그 콘솔"을 클릭하고 "기본 채널"을 알림으로 설정한 클라이언트를 생성합니다.

방금 생성한 클라이언트로 pn_gcm 키가 포함된 메시지를 전송하여 장치에 알림을 보낼 수 있습니다.

알림 키를 사용하여 Android 푸시 알림을 보냅니다:

{"pn_gcm":{"notification":{"body":"Hello World."}}}
Enter fullscreen mode Exit fullscreen mode

Hello World Android Push Notification모바일 푸시 알림을 보내는 데 문제가 있는 경우 문제 해결 가이드를 참조하세요.

내용

FCM을 사용하여 안드로이드에 파이어베이스 푸시 알림을 보내는 방법에 대한개요펍넙으로 안드로이드에 파이어베이스 푸시 알림을 보내는방법펍넙으로 파이어베이스 푸시알림시작하기새 안드로이드 앱만들기실시간 알림 구축을 위한 파이어베이스 클라우드 메시징추가하기파이어베이스 모바일 푸시 알림을 위한 FCM 및 펍넙구성하기펍넙에서 모바일 푸시 알림보내기

PubNub이 어떤 도움을 줄 수 있나요?

이 문서는 원래 PubNub.com에 게시되었습니다.

저희 플랫폼은 개발자가 웹 앱, 모바일 앱, IoT 디바이스를 위한 실시간 상호작용을 구축, 제공, 관리할 수 있도록 지원합니다.

저희 플랫폼의 기반은 업계에서 가장 크고 확장성이 뛰어난 실시간 에지 메시징 네트워크입니다. 전 세계 15개 이상의 PoP가 월간 8억 명의 활성 사용자를 지원하고 99.999%의 안정성을 제공하므로 중단, 동시 접속자 수 제한 또는 트래픽 폭증으로 인한 지연 문제를 걱정할 필요가 없습니다.

PubNub 체험하기

라이브 투어를 통해 5분 이내에 모든 PubNub 기반 앱의 필수 개념을 이해하세요.

설정하기

PubNub 계정에 가입하여 PubNub 키에 무료로 즉시 액세스하세요.

시작하기

사용 사례나 SDK에 관계없이 PubNub 문서를 통해 바로 시작하고 실행할 수 있습니다.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .