ユースケースサンプル: プレイヤーに新年の挨拶をする
Send a push notification to all users on January 1st at 00:00:00 UTC wishing them a happy new year.
読み終わるまでの所要時間 4 分最終更新 23日前
このサンプルは、1 月 1 日の 00:00:00 UTC に新年の挨拶をするプッシュ通知をすべてのユーザーに送信するようにスケジュールを設定する方法を示します。
前提条件
最初に、必要なアクセスロールでサービスアカウントを作成し、UGS CLI を設定する必要があります。サービスアカウントを使用した認証
Scheduling および Triggers サービスを呼び出す前に、サービスアカウントを使用して認証する必要があります。- Unity Cloud Dashboard に移動します。
- Administration (管理) > Service Accounts (サービスアカウント) を選択します。
- New (新規) ボタンを選択し、サービスアカウントの名前と説明を入力します。
- Create (作成) を選択します。
- Manage product roles (製品ロールの管理) を選択します。
- 以下のロールをサービスアカウントに追加します。
- LiveOps ドロップダウンから、Triggers Configuration Editor (Triggers 設定編集者)、Triggers Configuration Viewer (Triggers 設定閲覧者)、Scheduler Configuration Editor (Scheduler 設定編集者)、Scheduler Configuration Viewer (Scheduler 設定閲覧者) を選択します。
- Admin (管理者) ドロップダウンから Unity Environments Viewer (Unity 環境閲覧者) を選択します。
- LiveOps ドロップダウンから、Triggers Configuration Editor (Triggers 設定編集者)、Triggers Configuration Viewer (Triggers 設定閲覧者)、Scheduler Configuration Editor (Scheduler 設定編集者)、Scheduler Configuration Viewer (Scheduler 設定閲覧者) を選択します。
- Save (保存) を選択します。
- Add Key (キーの追加) を選択します。
- base64 エンコードを使用して Key ID (キー ID) と Secret key (秘密鍵) をエンコードします。形式は "key_id:secret_key" です。この値をメモしておきます。
UGS CLI の設定
以下のステップに従って、UGS CLI の使用を準備します。- UGS CLI をインストール します。
-
プロジェクト ID と環境を以下のように設定します。
ugs config set project-id <your-project-id>
ugs config set environment-name <your-environment-name> - 前に作成したサービスアカウントを使用して認証します。認証の取得 を参照してください。
Cloud Code の設定
スコアが破られたプレイヤーにプッシュ通知を送信するモジュールエンドポイントを定義します。 以下のようなコンテンツでWishHappyNewYearモジュールをデプロイします。 モジュールのデプロイ方法を学習するには、Hello World のデプロイ を参照してください。using Microsoft.Extensions.DependencyInjection;using Microsoft.Extensions.Logging;using Unity.Services.CloudCode.Apis;using Unity.Services.CloudCode.Core;using Unity.Services.CloudCode.Shared;namespace WishHappyNewYear;public class HappyNewYear{ private readonly ILogger<HappyNewYear> _logger; public HappyNewYear(ILogger<HappyNewYear> logger) { _logger = logger; } [CloudCodeFunction("SendProjectMessage")] public async Task SendProjectMessage(IExecutionContext context, PushClient pushClient, string message, string messageType) { try { await pushClient.SendProjectMessageAsync(context, message, messageType); } catch (ApiException e) { _logger.LogError("Failed to send project message. Error: {Error}", e.Message); throw new Exception($"Failed to send project message. Error: {e.Message}"); } }}public class ModuleConfig : ICloudCodeSetup{ public void Setup(ICloudCodeConfig config) { config.Dependencies.AddSingleton(PushClient.Create()); }}
イベントのスケジュール
Cloud Code モジュールを定義した後で、1 月 1 日の 00:00:00 UTC に新年の挨拶をするプッシュ通知をすべてのユーザーに送信するようにスケジュールを作成できます。new-file以下の設定でugs scheduler new-file schedule-config
schedule-config.schedUGS CLI ツールを使用して設定をデプロイします。{ "$schema": "https://ugs-config-schemas.unity3d.com/v1/schedules.schema.json", "Configs": { "wish-happy-new-year": { "EventName": "send-announcement", "Type": "one-time", "Schedule": "2025-01-01T00:00:00Z", "PayloadVersion": 1, "Payload": "{\"message\": \"Happy New Year!\", \"messageType\": \"HappyNewYear\"}" } }}
正しいレスポンスは以下のようになります。ugs deploy schedule-config.sched
Deployed:schedule-config.sched
トリガーの設定
Cloud Code モジュールをスケジュールイベントに接続するには、トリガーを作成します。トリガーは、1 月 1 日 00:00:00 UTC にイベントが発生したときに Cloud Code モジュールを実行します。new-file以下の設定でugs triggers new-file triggers-config
triggers-config.trUGS CLI ツールを使用して設定をデプロイします。{ "$schema": "https://ugs-config-schemas.unity3d.com/v1/triggers.schema.json", "Configs": [ { "Name": "happy-new-year", "EventType": "com.unity.services.scheduler.send-announcement.v1", "ActionUrn": "urn:ugs:cloud-code:WishHappyNewYear/SendProjectMessage", "ActionType": "cloud-code" } ]}
以下のようなレスポンスが返されます。ugs deploy triggers-config.tr
これで、1 月 1 日 00:00:00 UTC にスケジューラーイベントが発生したときに Cloud Code モジュール関数を実行するトリガーが設定されました。Deployed:triggers-config.tr
結果の検証
結果を検証するには、プッシュメッセージをサブスクライブする Unity プロジェクトを設定します。前提条件
プッシュメッセージをサブスクライブするには、最初に Cloud Code SDK をインストールし、Unity Gaming Services プロジェクト を Unity エディターにリンクする必要があります。プロジェクトのリンク
Unity Gaming Services プロジェクト を Unity エディターにリンクします。UGS プロジェクト ID は Unity Cloud Dashboard にあります。- Unity エディターで、Edit (編集) > Project Settings (プロジェクト設定) > Services (サービス) を選択します。
- プロジェクトをリンクします。
- プロジェクトに Unity プロジェクト ID がない場合:
- Create a Unity Project ID (Unity プロジェクト ID の作成) > Organizations (組織) の順に選択し、ドロップダウンメニューから組織を選択します。
- Create project ID (プロジェクト ID を作成) を選択します。
- 既存の Unity プロジェクト ID がある場合:
- Use an existing Unity project ID (既存の Unity プロジェクト ID を使用) を選択します。
- ドロップダウンメニューから組織とプロジェクトを選択します。
- Link project ID (プロジェクト ID をリンク) を選択します。
UnityEditor.CloudProjectSettings.projectIdSDK のインストール
Unity エディターの最新の Cloud Code パッケージをインストールするには、以下を行います。- Unity エディターで、Window (ウィンドウ) > Package Manager (パッケージマネージャー) を開きます。
- Package Manager で、Unity Registry (Unity レジストリ) のリストビューを選択します。
- を検索するか、リストから Cloud Code パッケージを探します。
com.unity.services.cloudcode - このパッケージを選択し、Install (インストール) をクリックします。
Monobehaviour スクリプトの作成
プロジェクトレベルのメッセージをサブスクライブするようにMonobehaviourMonoBehaviourUnity エディターに、モジュールが実行したときに送信されたプッシュメッセージが表示されます。using System;using System.Threading.Tasks;using Newtonsoft.Json;using Unity.Services.Authentication;using Unity.Services.CloudCode;using Unity.Services.CloudCode.Subscriptions;using Unity.Services.Core;using UnityEngine;namespace CloudCode{ public class CloudCodePushExample : MonoBehaviour { async void Start() { await UnityServices.InitializeAsync(); await AuthenticationService.Instance.SignInAnonymouslyAsync(); Debug.Log(AuthenticationService.Instance.PlayerId); await SubscribeToProjectMessages(); } // This method creates a subscription to project messages and logs out the messages received, // the state changes of the connection, when the player is kicked and when an error occurs. Task SubscribeToProjectMessages() { var callbacks = new SubscriptionEventCallbacks(); callbacks.MessageReceived += @event => { Debug.Log(DateTime.Now.ToString("yyyy-MM-dd'T'HH:mm:ss.fffK")); Debug.Log($"Got project subscription Message: {JsonConvert.SerializeObject(@event, Formatting.Indented)}"); }; callbacks.ConnectionStateChanged += @event => { Debug.Log($"Got project subscription ConnectionStateChanged: {JsonConvert.SerializeObject(@event, Formatting.Indented)}"); }; callbacks.Kicked += () => { Debug.Log($"Got project subscription Kicked"); }; callbacks.Error += @event => { Debug.Log($"Got project subscription Error: {JsonConvert.SerializeObject(@event, Formatting.Indented)}"); }; return CloudCodeService.Instance.SubscribeToProjectMessagesAsync(callbacks); }}
Got project subscription Message: { "data_base64": <BASE64-ENCODED-DATA>, "time": "2023-09-27T16:01:46.468321794Z", "message": "Happy new year!", "specversion": "1.0", "id": <ID>, "source": "https://cloud-code.service.api.unity.com", "type": "com.unity.services.cloud-code.push.v1", "projectid": <PROJECT-ID>, "environmentid": <ENVIRONMENT-ID>, "correlationid": <CORRELATION-ID>, "messagetype": "announcement"}