Amazon Web Services 한국 블로그

안드로이드 모바일 앱에서 Amazon Pinpoint 푸시 알림 수신하기

AWS에서는 Amazon PinpointAmazon Simple Notification Service (Amazon SNS)를 통해 다양한 플랫폼에 모바일 푸시 알림(Push notification)을 보낼 수 있는 방법을 제공해 드리고 있습니다.  이 글에서는 Amazon Pinpoint에서 고객의 모바일 장치로 보낼 수 있는 모바일 앱 푸시 알림의 유형을 소개합니다. 그리고 모바일앱에서 Amazon Pinpoint에서 발송된 푸시 알림의 유형에 따라 안드로이드 모바일앱에서 어떻게 수신하고 처리하는지 소개합니다.

단, 모바일 푸시 알림을 보내기 위한 ‘ Amazon Pinpoint 생성 및 설정’ 방법에 대해서는 다루지 않았습니다. 이를 위해 AWS Amplify Library – 리액트 네이티브 와  AWS Mobile SDK – 안드로이드를 참고하시면 AWS Amplify로 쉽게 Amazon Pinpoint 서비스를 생성하고 앱과 연동하는 방법을 참고하실 수 있습니다. 또한, Amazon Pinpoint 콘솔에서 푸시 알림을 보내는 방법은 Amazon Pinpoint 캠페인 문서를 참고하시기 바랍니다.

모바일 앱 푸시 알림이란?

모바일 앱 푸시 알림(Push notification)은 앱 제공자가 앱을 사용하는 고객의 모바일 장치로 메시지를 전송하는 기술을 말합니다.

모바일 앱 푸시 알림은 애플리케이션의 다양한 정보를 전달하는데 활용됩니다.  뉴스, 날씨 등의 정보는 물론 쇼핑몰의 할인이나 쿠폰, 배송 현황, 공연 앱의 공연정보, 항공 앱의 예약 정보 안내 등 광범위하게 활용되고 있습니다.

Amazon Pinpoint에서 지원되는 푸시 알림 유형

Amazon Pinpoint 콘솔에서 푸시 알림을 전송할 때 전송할 알림 유형을 선택해야 합니다. 각 알림 유형은 다음과 같은 특징이 있습니다.

  • 표준 메시지(Standard notification)  – 일반적으로 모바일 장치의 알림 바(Notification Bar)에 알림을 띄우기 위한 용도로 사용됩니다. 알림 메시지의 제목과 본문을 포함하고 있으며, 알림을 터치할 때 어떤 동작(작업)을 취할지 선택할 수 있습니다. 원하는 경우 메시지의 미디어 URL(알림과 함께 표시되는 이미지의 위치)과 TTL(Time-To-Live) 값(Amazon Pinpoint가 메시지 배달을 시도하는 시간)도 지정할 수 있습니다.

  • 무음 알림(Silent notification) – 수신자의 디바이스에 알림을 표시하지 않고 앱으로 전송되는 푸시 알림입니다.  일반적으로 앱으로 데이터를 전송하는 용도로 사용됩니다. 데이터 메시지에는 예약 키 이름 없이 사용자 지정 키-값 쌍으로 구성합니다. 데이터 메시지 처리는 수신한 앱에서 담당합니다.

안드로이드 모바일앱 처리 방법

안드로이드 네이티브 앱(Android Native App) 과 리액트 네이티브 앱(React Native App)에서 알림 유형에 따라 처리하는 방법을 각각 살펴보겠습니다.

1. 안드로이드 네이티브 앱

안드로이드 네이티브 앱에서 Amazon Pinpoint의 푸시 알림을 처리하기 위해서는 AWS Mobile SDK를 사용하여 구현해야 합니다.  메시지를 수신하려면 FirebaseMessagingService를 상속받은 서비스가 필요한데, 서비스를 생성하고 onMessageReceived 함수를 다음과 같이 재정의 합니다.

public class PushListenerService extends FirebaseMessagingService {

	@Override
	public void onMessageReceived(RemoteMessage remoteMessage) {
		super.onMessageReceived(remoteMessage);

		final NotificationClient notificationClient = MainActivity.getPinpointManager(getApplicationContext()).getNotificationClient();

		final NotificationDetails notificationDetails = NotificationDetails.builder()
				.from(remoteMessage.getFrom())
				.mapData(remoteMessage.getData())
				.intentAction(NotificationClient.FCM_INTENT_ACTION)
				.build();

		NotificationClient.PushResult pushResult = notificationClient.handleNotificationReceived(notificationDetails);
		Log.e(TAG, " Message: " + pushResult);
		if (!NotificationClient.PushResult.NOT_HANDLED.equals(pushResult)) {
			if (NotificationClient.PushResult.APP_IN_FOREGROUND.equals(pushResult)) {
				….
			}
			return;
		}
	}
}

함수를 재정의할 때 handleNotificationReceived 함수를 호출해야 합니다.  이 함수는 AWS Mobile SDK 내부에서 수신한 알림을 분석하는데,

  • 표준 메시지일 경우 – 현재 수신한 앱의 상태에 따라 처리를 다르게 합니다. 앱이 백그라운드에서 실행 중이거나 앱이 실행되고 있지 않은 상태라면 알림 바에 알림을 띄웁니다. 만약 앱의 상태가 포그라운드거나 사용자에 의해 알림을 거절해 둔 상태 라면 알림을 띄우지 않습니다. 이 함수는 처리된 결과를 리턴하는데 리턴 값에 따라 동작을 구현할 수 있습니다.  예를 들면 앱이 포그라운드 상태에 있더라도 알림을 띄우는 동작을 추가할 수 있습니다.
  • 무음 알림의 경우 – 앱의 상태와 무관하게 알림을 띄우지 않습니다. 알림으로 전달받은 데이터를 activity로 이동시켜 APP 내부에서 관련 로직을 처리하면 됩니다.

2. 리액트 네이티브 앱

리액트 네이티브 앱에서 Amazon Pinpoint의 푸시 알림을 수신하기 위해서는 Amplify Libraries를 사용하여 구현해야 하는데, @aws-amplify/pushnotification 패키지가 필요합니다.  안드로이드 네이티브 앱에서는 FirebaseMessagingService를 상속받아 직접 서비스를 구현해야 했다면 리액트 네이티브 앱에서는 패키지 안에 RNPushNotificationMessagingService가 구현되어 있습니다. 이 서비스에서 푸시 알림을 수신하고 AWS Mobile SDK의 내부 동작과 유사하게 처리합니다. 표준 메시지의 경우 앱의 상태(백그라운드 or 포그라운드)를 확인하여 알림 바에 띄우는 동작을 결정합니다. 그리고 푸시 알림 처리 결과를 onNotification 함수를 호출하여 전달합니다. 무음 알림의 경우 데이터를 처리할 수 있도록 onNotification 함수를 호출합니다.


PushNotification.onNotification(notification => {
  if (notification.foreground) {
    console.log('onNotification foreground', notification);
  } else {
    console.log('onNotification background or closed', notification);
  }

  // extract the data passed in the push notification
  const data = JSON.parse(notification.data['pinpoint.jsonBody']);
  console.log('onNotification data', data);
});

마무리

지금까지 안드로이드의 각 모바일 앱에서 Amazon Pinpoint 푸시 알림을 처리하는 방법을 알아보았습니다. 앱에서 사용하는 SDK는 다르나, 전체적인 동작은 다음과 같습니다.

  • 표준 메시지 – 푸시 알림을 수신 앱이 백그라운드에 있으면 알림 바를 SDK에 의해  띄우고, 푸시 알림 분석 결과를 앱에게 리턴합니다.
  • 무음 알림 – 별도의 알림 표시 없이 데이터를 앱에게 전달합니다.

더 자세한 것은 기술 문서를 참고하시기 바랍니다.

– 정창호,  AWS 솔루션즈 아키텍트