Site icon 지락문화예술공작단

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

안드로이드 모바일 앱에서 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 콘솔에서 푸시 알림을 전송할 때 전송할 알림 유형을 선택해야 합니다. 각 알림 유형은 다음과 같은 특징이 있습니다.

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

안드로이드 네이티브 앱(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 내부에서 수신한 알림을 분석하는데,

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는 다르나, 전체적인 동작은 다음과 같습니다.

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

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

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

Exit mobile version