Unity/Unity Cloud(UGS)

[Unity] UGS - Push Notifications

달시_Dalsi 2024. 11. 2. 20:18

Push Notifications 란?

Push Notifications는 로컬 알림과 달리 게임 개발자가 사용자를 대상으로 푸시 알림을 보내 게임 내 이벤트나 업데이트 등 서버에서 비정기적으로 알림을 보내고자할때 사용되는 푸시 알림 기능입니다. 이를 통해 게임 이용률을 높이고, 중요한 게임 소식을 즉시 전달할 수 있습니다.

Push Notifications의 주요 사용처 및 장점

  • 유저 재접속률 증가
    푸시 알림을 통해 유저가 게임으로 다시 돌아오도록 유도할 수 있습니다. 예를 들어, 새로운 이벤트 알림, 업데이트 알림, 또는 게임 내 보상 알림을 통해 사용자의 관심을 끌 수 있습니다.
  • 실시간 소식 전달
    이벤트나 긴급 업데이트 상황에서 유저들에게 즉각적인 소식을 전달할 수 있습니다.
  • 맞춤화된 메세지 전달
    특정 사용자 그룹이나 개별 사용자에 맞춤형 메시지를 전송하여, 게임 내 활동이나 성과에 따라 적합한 알림을 보낼 수 있습니다.

 

UGS Push Notifications 설정 방법 (google)

1. 유니티 프로젝트 설정

1. Package Manager

  • Unity 에디터에서 Package Manager를 열고 UGS의 Push Notifications 패키지를 검색하여 설치합니다.

 

2 . Firebase 설정

1. Firebase 서비스 키 생성

  • Firebase 콘솔에서 프로젝트를 선택합니다.
  • 프로젝트 설정으로 이동하여 상단의 서비스 계정을 클릭합니다.
  • 서비스 계정 만들기를 선택한 후 새로운 개인 키 생성을 클릭하고, 키 파일을 다운로드합니다.
    (Firebase 프로젝트 생성과정에서 별도의 SDK는 설치 X)

  • Authentication의 로그인 방법을 하나 추가해야합니다. 그래야 나중에 쓰일 웹API가 생성됩니다. 익명 방법을 하나 추가하는것이 가장 편하다고 생각합니다.

 

 

2. Unity 대시보드에 키 업로드

  • Unity Cloud 대시보드에서 제품 > 푸시 알림 > 설정으로 이동합니다.
  • Google 키 섹션에서 키 추가 또는 편집 아이콘을 선택합니다.
  • Firebase에서 다운로드한 키 파일을 업로드한 후 마침을 클릭합니다.

 

3. 편집기 구성

  • Unity 편집기에서 프로젝트 설정 > 서비스 > 푸시 알림으로 이동하여 Android(Firebase) 설정을 구성합니다.
    Firebase 세팅값은 Firebase 프로젝트에 들어간뒤, 설정 -> 프로젝트 설정에 있는 내 프로젝트에 있습니다.

  • 대시보드로 돌아가 Next 버튼을 클릭해 구성을 완료합니다.

 

코드 작성

using System;
using Unity.Notifications.Android;
using Unity.Services.Analytics;
using Unity.Services.Core;
using System.Threading.Tasks;
using Unity.Services.PushNotifications;
using UnityEngine;
using UnityEngine.Android;
using Unity.Services.Authentication;

public class PushManager : MonoBehaviour
{
    async void Start()
    {
        // 알람 권한 요청
        RequestNotificationPermission();

        await UnityServices.InitializeAsync();

        // 익명 로그인 시도
        await SignInAnonymouslyAsync();

        // Unity Analytics를 사용 중이며 데이터 수집이 필요한 경우 사용
        AnalyticsService.Instance.StartDataCollection();
    }

    async Task SignInAnonymouslyAsync()
    {
        try
        {
            // 익명 로그인 시도
            await AuthenticationService.Instance.SignInAnonymouslyAsync();
            Debug.Log("익명 로그인 성공!");

            // PlayerID 가져오는 방법
            Debug.Log($"PlayerID: {AuthenticationService.Instance.PlayerId}");

        }
        catch (AuthenticationException ex)
        {
            // AuthenticationErrorCodes와 에러 코드 비교
            // 적절한 오류 메시지를 플레이어에게 알림
            Debug.LogException(ex);
        }
        catch (RequestFailedException ex)
        {
            // CommonErrorCodes와 에러 코드 비교
            // 적절한 오류 메시지를 플레이어에게 알림
            Debug.LogException(ex);
        }
    }

    void RequestNotificationPermission()
    {
        string androidInfo = SystemInfo.operatingSystem;

        int apiLevel = int.Parse(androidInfo.Substring(androidInfo.IndexOf("-") + 1, 3), System.Globalization.CultureInfo.InvariantCulture);

        // Android 13 이상에서 알림 권한 요청
        if (Application.platform == RuntimePlatform.Android &&
            33 <= apiLevel &&
            !UnityEngine.Android.Permission.HasUserAuthorizedPermission("android.permission.POST_NOTIFICATIONS"))
        {
            Permission.RequestUserPermission("android.permission.POST_NOTIFICATIONS");
        }

        // 디바이스의 api level이 26 이상이라면 알림 채널 설정
        if (apiLevel >= 26)
        {
            var channel = new AndroidNotificationChannel()
            {
                Id = "default_channel",
                Name = "pubSdk",
                Importance = Importance.High,
                Description = "for test",
            };
            AndroidNotificationCenter.RegisterNotificationChannel(channel);
        }
    }

    public async void pushnoti()
    {
        try
        {
            string pushToken = await PushNotificationsService.Instance.RegisterForPushNotificationsAsync();

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

 

대시보드 알림 테스트 기능

Push notification Settings의 설정에 들어가면 Send test를 눌러 실행할 수 있습니다.

 

어플을 설치 및 최초 실행 이후 테스트하고자 하는 폰의 토큰을 위 사진에 입력하여 Send를 보내면 테스트 알림이 전송됩니다. 아래 코드를 통해 토큰을 알 수 있습니다.

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

 

 

마무리

푸시 알림은 게임 종료후에도 플레이어에게 중요한 알림을 전달해 게임 플레이를 유도하는 효과적인 방법입니다. Unity의 푸시 알림 기능은 손쉬운 설정방법과 가이드북을 통해 구현 난이도가 낮아 빠르게 개발 가능합니다.


ttps://docs.unity.com/ugs/manual/push-notifications/manual/get-started

 

First steps

To use Push Notifications, you need to sign up for Unity Analytics, which is part of Unity Gaming Services (UGS). For more information about Analytics pricing, see here. To learn more about Push Notifications fair usage visit here. Important: Only Organiza

docs.unity.com

 

'Unity > Unity Cloud(UGS)' 카테고리의 다른 글

[Unity] UGS - Leaderboards  (1) 2024.10.27
[Unity] UGS - Asset Manager  (1) 2024.10.26
[Unity] UGS - Cloud Code  (0) 2024.10.25
[Unity] UGS - Cloud Save  (0) 2024.10.24
[Unity] UGS - Remote Config  (0) 2024.10.23