# Push Notifications SDK

> Register for Push Notifications and configure the SDK for your platform.

Push Notifications SDK를 사용하여 이미지가 포함된 다양한 푸시 알림 등 푸시 알림 캠페인을 사용자에게 전송합니다.

## 플랫폼 지원##platform-support

본 SDK에서는 iOS 및 Android가 모두 지원됩니다. iOS 10 이상 및 Android SDK 26(Oreo) 이상이 지원됩니다.

## 빠른 시작##quick-start

SDK에서 제공되는 샘플 스크립트로 푸시 알림을 등록할 수 있습니다. 샘플을 프로젝트에 추가하고 에디터의 Project Settings에서 관련 설정을 지정합니다.

## Push Notifications 등록##registering-for-push-notifications

Push Notifications를 등록하려면 다음 3단계를 따릅니다.

1. [에디터에서 설정](./get-started.md)을 채웁니다. **Project Settings** > **Services** > **Push Notifications**에서 확인할 수 있습니다.
2. [Unity 서비스를 초기화](./get-started.md)하면 필수 분석 이벤트가 Unity Analytics로 전송될 수 있습니다. 또한 필수 이벤트의 [개인정보 보호 플로](/analytics/privacy-and-consent/manage-data-privacy.md)가 구현되어야 올바르게 전송될 수 있습니다.
3. 게임의 시작 코드에 알림을 등록하여 알림이 누락되지 않도록 합니다. 그러나 첫 등록 시 사용자에게 권한 요청이 표시되므로 이 호출이 게임 내에서 지장을 주지 않는 위치에 나타나도록 해야 합니다. SDK에서는 이미지, 제목, 메시지 본문 등의 알림 콘텐츠 표시를 처리합니다.

> **Note:**
>
> **참고**: 푸시 알림과 관련된 이벤트 데이터가 올바르게 전송되었는지 확인하려면 Analytics가 필요합니다. 개인정보 보호 동의를 처리하려면 Analytics 기술 자료를 참고하여 자세한 내용을 알아봅니다.

코드 샘플:

```cs
using Unity.Services.Analytics;
using Unity.Services.Core;
using Unity.Services.PushNotifications;
...

await UnityServices.InitializeAsync();

bool userGaveConsent = ...;

if (userGaveConsent)
{
	AnalyticsService.Instance.StartDataCollection();
}

try
{
    string pushToken = await PushNotificationsService.Instance.RegisterForPushNotificationsAsync();

    PushNotificationsService.Instance.OnNotificationReceived += notificationData =>
    {
        Debug.Log("Received a notification!");
    };
}
catch (Exception e)
{
    Debug.Log("Failed to retrieve a push notification token.");
}
```

### 알림 수신 콜백##notification-received-callbacks

알림을 받으면 C# 이벤트 콜백을 수신하도록 대리인을 등록하여 해당 포인트에서 커스텀 동작을 수행할 수 있습니다. 이렇게 하려면 위의 샘플에 표시된 대로 `PushNotifications.OnNotificationReceived`에 대리인 및 메서드 콜백을 추가합니다.

### Push Notifications 설정##push-notifications-settings

SDK가 제대로 작동하려면 여러 가지 설정이 완료되어야 합니다. 일부 설정은 설정 이름에 표시된 일부 플랫폼에서만 사용할 수 있습니다. Android(Firebase) 설정은 다음과 같이 지정할 수 있습니다.

**Unity 에디터** > **Edit** > **Project Settings** > **Services** > **Push Notifications**에서 이러한 설정을 확인합니다. 아래의 모든 필드 값은 Firebase 대시보드의 ‘Settings’ 페이지에서 확인할 수 있습니다.

* **FirebaseWebApiKey**: Android의 Firebase Cloud Messaging API에 사용되는 Firebase 프로젝트의 ‘Web API Key’입니다. 프로젝트에 표시되지 않으면 먼저 Firebase Authentication을 활성화해야 나타날 수도 있습니다.
* **FirebaseProjectNumber**: Android의 Firebase Cloud Messaging에 사용되는 ‘Project Number’입니다.
* **FirebaseAppID**: Android의 Firebase Cloud Messaging API에 사용되는 Firebase 애플리케이션의 ‘App ID’입니다.
* **FirebaseProjectID**: Android의 Firebase Cloud Messaging API에 사용되는 Firebase 프로젝트의 ‘Project ID’입니다.

> **Note:**
>
> Firebase에 설정된 Android 앱이 없으면 앱을 추가해야 합니다. ‘Add app’ 마법사에서는 Firebase에서 앱을 만드는 것은 물론이고 Firebase SDK를 바로 연동하는 방법에 관한 지침도 제공합니다. **Firebase SDK를 설치할 필요가 없으며** 프로젝트에 파일 또는 Firebase SDK를 추가하는 작업과 관련된 모든 단계를 안전하게 무시할 수 있음을 참고하시기 바랍니다.


**Frame:**
![](/api/media?file=/push-notifications/media/images/project-settings.png)

이러한 설정은 **Edit** > **Project Settings** > **Services** > **Push Notifications**에서 지정합니다.

최신 프로젝트에서는 다음과 같이 Cloud Messaging API를 활성화해야 합니다.

1. 비활성화 상태인 Cloud Messaging API (Legacy) 옆의 점 세 개를 선택합니다.
2. ENABLE Cloud Messaging API (Legacy)를 선택합니다.
3. Firebase 콘솔을 새로 고칩니다.


**Frame:**
![](/api/media?file=/push-notifications/media/images/cloud-messaging.png)

### Analytics##analytics

SDK에서는 다음의 Analytics 이벤트 2가지를 기록합니다.

* **notificationServices:** 이 이벤트는 클라이언트에 새 토큰이 등록될 때마다 기록됩니다. 푸시 토큰을 예로 들 수 있으며, 이는 해당 토큰을 백엔드 서비스에 등록하고 Unity Dashboard에서 알림을 전송하는 데 사용됩니다. 본 제품이 제대로 작동하기 위해 필요합니다.
* **notificationOpened:** 이 이벤트는 사용자가 알림을 열 때마다 기록됩니다. 사용자가 포함되어 있는 캠페인과 집단, 알림에서 앱이 실행되었는지 여부에 관한 데이터가 여기에 포함됩니다.

#### Analytics 전용 모드##analytics-only-mode

> **Warning:**
>
> 본 섹션은 별도의 푸시 알림 구현과 함께 Unity Dashboard Push Notifications 서비스를 사용하려는 경우에만 해당되는 내용입니다. 그렇지 않은 대부분의 사용자에게는 제품의 기능 저하가 발생할 수 있으므로 이 섹션을 사용하지 않는 것이 좋습니다.

필요한 경우 기존 푸시 알림 서비스를 SDK와 연동할 수 있습니다. 이렇게 하려면 위에 표시된 대로 등록 메서드를 호출하지 말고 `PushNotificationsService.Instance.Analytics`의 메서드 2가지와 기존 구현을 함께 사용합니다.

`RecordPushTokenUpdated`는 디바이스의 새 푸시 토큰을 수신할 때 호출되어야 합니다. OS는 앱 수명 주기의 여러 포인트에서 새 토큰을 생성할 수 있으므로 시작할 때 외에도 토큰이 변경될 때마다 호출되어야 합니다. 전체 호출은 `PushNotificationsService.Instance.Analytics.RecordPushTokenUpdated(token);`입니다.

`RecordNotificationOpened`는 알림이 열릴 때 호출되어야 합니다. 알림 페이로드가 포함된 데이터인 사전과 앱이 알림에서 실행되었는지 여부를 나타내는 부울 플래그를 가져옵니다. 전체 호출은 `PushNotificationsService.Instance.Analytics.RecordNotificationOpened(notificationData);`입니다.

이렇게 하면 Unity Dashboard에서 알림을 전송하고 예약할 수 있습니다. 그러나 구현된 다른 푸시 알림 설정에 따라 크게 영향을 받고 알림에서 이미지나 다른 콘텐츠가 누락될 수도 있으므로 가능하면 SDK와 연동된 Push Notifications 솔루션만으로 표준 설정을 사용하는 것이 가장 좋습니다.

## SDK 연동 테스트##testing-the-sdk-integration

앱에서 다음 단계에 따라 Push Notifications SDK 연동을 테스트할 수 있습니다.

> **Note:**
>
> [시작하기](./get-started.md) 내의 단계에 따라 수행합니다.

1. 앱에서 PushNotificationsService 토큰을 가져와 ‘Debug.Log’를 사용하여 로그에 기록합니다.

2. 타겟 플랫폼에 따라 [Android](https://docs.unity3d.com/2021.2/Documentation/Manual/android-debugging-on-an-android-device.html)용 디버그 가이드 또는 [iOS](https://docs.unity3d.com/2021.2/Documentation/Manual/iphone-BuildProcess.html)용 빌드 및 실행 가이드를 참고하여 앱을 실행합니다.

3. 앱 로그를 읽고 로그 토큰을 가져옵니다.

   1. **Android의 경우**: [Android Logcat](https://docs.unity3d.com/Packages/com.unity.mobile.android-logcat@latest) 패키지를 사용합니다.
   2. **iOS의 경우**: 앱을 실행할 때 XCODE 내부의 로그를 확인합니다.

4. UGS 대시보드에서 기존 Push Notification Campaign으로 이동하거나 새 더미를 생성합니다.

5. ‘Content’ 단계에서 필요에 따라 알림을 생성하고 ‘Test on Device’로 이동합니다.


**Frame:**
![](/api/media?file=/push-notifications/media/images/test-on-device.png)

6. 타겟 디바이스를 선택하고 가져온 토큰을 입력합니다.


**Frame:**
![](/api/media?file=/push-notifications/media/images/send-test.png)

7. **Send**를 선택하고 디바이스에 알림이 수신되었는지 확인합니다.

## EDM4U(External Dependency Manager for Unity) 지원##external-dependency-manager-for-unity-edm4u-support

> **Note:**
>
> Push Notifications와 함께 EDM4U 또는 MDR을 연동하는 사용자에게 해당하는 내용입니다.

Google Firebase 통합 패키지를 비롯한 기타 SDK 또는 Unity 패키지의 경우, [EDM4U(External Dependency Manager for Unity)](https://github.com/googlesamples/unity-jar-resolver) 또는 MDR(Mobile Dependency Resolver)을 사용하여 Unity 프로젝트 내부의 종속성을 해결합니다.

Push Notifications SDK에서는 EDM4U 또는 MDR을 사용하여 Unity 프로젝트 내에서 종속성을 해결할 **필요가 없으며**, 기본적으로 EDM4U 또는 MDR을 재배포하거나 사용하지도 않습니다.

그러나 `3.0.1-pre.1` 버전부터 EDM4U 또는 MDR을 사용하는 경우 Push Notifications SDK가 이와 연동되어 종속성 파일(PushSDKDependencies.xml)을 생성함으로써 자동 생성된 `Assets/Push Notifications/Editor/Android` 디렉토리 내에서 사용됩니다.

애플리케이션을 빌드하기 전에 `Resolve` 또는 `Force Resolve`(둘 다 **Assets > External Dependency Manager > Android Manager**에 있음)를 실행하여 Push Notifications SDK의 종속성을 해결합니다. 해당 종속성이 해결되었는지 확인하려면 `Display Libraries` 옵션을 사용합니다. 이는 **Assets > External Dependency Manager > Android Manager > Display Libraries**에서 찾을 수 있습니다.


**Frame:**
![](/api/media?file=/push-notifications/media/images/edm4u-options.png)

다음 줄이 표시됩니다.

```text
implementation 'com.google.firebase:firebase-messaging-ktx:22.0.0' // Assets/Push Notifications/Editor/Android/PushSDKDependencies.xml:9
```

다른 패키지에서도 동일한 종속성이 필요한 경우 코멘트는 다를 수 있다는 점을 참고하시기 바랍니다. 이 경우 EDM4U는 인접한 코멘트에 종속성이 추출된 모든 파일을 나열합니다. 종속성 파일 경로(`Assets/Push Notifications/Editor/Android/PushSDKDependencies.xml:9`)가 코멘트 내에 표시된다면 EDM4U 또는 MDR이 종속성 파일을 감지하고 읽은 것으로 해석할 수 있습니다.

이 줄이 표시되지 **않으면** 종속성 파일이 `Assets/Push Notifications/Editor/Android` 디렉토리에 있는지 확인하고, **Assets > External Dependency Manager > Android Manager > Force Resolve**에 있는 `Force Resolve` 옵션을 다시 사용하여 시도합니다.

종속성 파일이 생성되지 않으면 프로젝트를 다시 엽니다. 종속성 파일은 이 프로세스에서 생성되어야 하는 파일입니다.
