Unity Mobile Notification / LocalNotification / PushNotification を実装してみる vol.1

Unity Mobile Notifications Package
https://docs.unity3d.com/Packages/com.unity.mobile.notifications@1.2/manual/index.html

Unity-Technologies/NotificationsSamples
https://github.com/Unity-Technologies/NotificationsSamples

こちらを利用して実装してみたいと思います。

Mobile Notifications パッケージを追加する

Unity Mobile Notificatioins Package(1.0.3

  • スケジュールローカル通知、一回またはリピート通知
  • キャンセル、通知表示のキャンセル、ローカル通知予約のキャンセル
  • Android
    • 通知チャネル設定 ( Oreo以降
    • デバイス再起動時の通知保存
    • カスタムアイコン設置
  • iOS
    • Apple Push Notificatoin Service(APNs)の受信
    • 起動中に他アプリから通知を受信した時に通知内容の修正
    • グループ通知のスレッド化(iOS 12+
  • 要件
    • Android 4.4 以上 , iOS 10 以上
    • Unity 2018.3以降

Project Settings > Mobile Notification Settings

Edit > Project Settings を開きます。

Android – アイコンのIDを設定。(詳細はAndroid辺にて。

iOS – 一旦ローカルプッシュのみで利用するので
Enable Push Notificationsはチェックしない状態です。
Request Authorization on App Launchで起動時に許可ポップアップがでます。

チェックを外して任意のタイミングで可能です。
こちらのほうが良さそうですが。

IEnumerator RequestAuthorization()
{
  using (var req = new AuthorizationRequest(AuthorizationOption.Alert | AuthorizationOption.Badge, true))
  {
  while (!req.IsFinished)
  {
    yield return null;
  };

  string res = "\n RequestAuthorization: \n";
  res += "\n finished: " + req.IsFinished;
  res += "\n granted :  " + req.Granted;
  res += "\n error:  " + req.Error;
  res += "\n deviceToken:  " + req.DeviceToken;
  Debug.Log(res);
}

Unity-Technologies/NotificationsSamples

NotificationsSamplesからWrapperを利用します。
Demoの各ファイルを確認して利用します。

Assets/Scripts 以下のファイルはそのまま利用します。
Assets/Scripts/Notifications/ として保存しました

GameObjectをNotificationManagerとして設置
GameNotificationsManagerを追加
Modeを設定

No Queue : OS で管理
Queue : Manager で管理

ClearOnForegrounding : フォアグラウンドに来たら全て削除

RescheduleAfterClearing : 削除後に同じものを再度入れる?

とりあえず、ClearOnForegroundingを選択してみます。

ゲーム内でスケジュールを設置してみる。
NotificationConsoleを参考にスケジュールを設置してみる。

manager
StartでのInitialize
SendNotificationだけでとりあえず実行できると思います。

SendNotificationを呼び出すオブジェクトにNotificationConsoleを追加しました。

任意の場所で、3分後に設定してみます。
* Queue を利用していないのでバッヂは設定しないと表示されません。3を表示しました。

System.DateTime deliveryTime = System.DateTime.Now.AddMinutes(3);
GetComponent<NotificationConsole>().SendNotification("TestTitle", "てすとです", deliveryTime, 3);

無事表示されました!
IDでキャンセルもできるので、IDを設定して

public void SendNotification(int? notificationId, ...として
if (notificationId != null){
    notification.Id = notificationId;
}
public void CancelNotification(int notificationId)
{
    manager.CancelNotification(notificationId);
}

これでキャンセルも成功しました。他昨日は後ほど。

コメントを残す

メールアドレスが公開されることはありません。

お気軽にコメントいただけると嬉しいです!
質問や気になる商品・サービスなどについてなんでも!
名前はハンドルネーム、emailも仮で適当な文字を入力いただければ問題ありません。