通知とは?

iOS,Androidのアプリには通知機能がありますが、 ユーザーがスマートフォンを手にしていない時にアプリを起動するきっかけを与えるものです。 通知には

  • プッシュ通知
  • ローカル通知

の2種類があります。 プッシュ通知はサーバー側からアプリ側へ通知を送るものです。 一方ローカル通知はサーバーを使用せずアプリ内から指定した時間後に通知を送るものです。 Unityには公式に通知用のパッケージが提供されています。 今回はローカル通知のみ解説します。

Mobile Notificationsパッケージをインストールする

Unity Editorのメニューから WindowPackage Managerを選択し、Package Managerを開きます。 Package ManagerからMobile Notificationsを選択し、Installボタンを押します。

インストールが完了するまで待ちます。

ローカル通知の基本

まず、iOSAndroidプラットフォームのみ対応しています。 アプリ側で通知するべき時が分かっている必要があります。 例えば、

  • 毎日特定の時間に通知する
  • スタミナが全回復する時間に通知する

などです。

MonoBehaviourを継承したクラスで、 以下のメソッドを追加しておけばユーザーがアプリから離れたタイミングが分かります。

private void OnApplicationPause(bool pauseStatus)
{
	if(pauseState)
	{
		// アプリから離れた
	}
}

この時にローカル通知を登録するとよいでしょう。

逆に戻ってきた時はローカル通知を解除しても良いです。

ローカル通知を実装する(iOS)

権限をリクエストする

アプリ起動時に通知のリクエストを送ります。

ユーザーが許可しないと通知は届きません。

// 通知の権限をリクエスト
var authorizationOption = AuthorizationOption.Alert | AuthorizationOption.Badge | AuthorizationOption.Sound;
iOSNotificationCenter.RequestAuthorization(authorizationOption, true);

ローカル通知を登録する

以下の様なコードで通知を登録できます。

この場合は通知を登録してから1分後に通知が届きます。

// トリガーの設定
var trigger = new iOSNotificationTimeIntervalTrigger
{
    // 1分後に通知
    TimeInterval = new System.TimeSpan(0, 1, 0),
    Repeats = false
};

// 通知の設定
var notification = new iOSNotification
{
    Identifier = "test_notification",
    Title = "お知らせ",
    Subtitle = "お知らせのテスト",
    Body = "お知らせは届きましたか?",
    ShowInForeground = true,
    ForegroundPresentationOption = (PresentationOption.Alert | PresentationOption.Sound),
    Trigger = trigger
};

// 通知を登録する
iOSNotificationCenter.ScheduleNotification(notification);

まずトリガーとして、どれだけ時間が経過したら通知するかを指定します。 次に通知の内容です。 通知を識別するための任意のID、タイトルや内容を設定し、 最後にiOSNotificationCenterに登録します。

ローカル通知を実装する(Android)

チャンネルを登録する

Androidの場合は、まずチャンネルを作成します。 ユーザーはチャンネル毎に通知のON/OFFを設定できます。

// Androidチャンネルを作成
var channel = new AndroidNotificationChannel()
{
    Id = "test_channel",
    Name = "Test Channel",
    Importance = Importance.Default,
    Description = "テスト用通知です",
};
AndroidNotificationCenter.RegisterNotificationChannel(channel);

通知を登録する

次に通知の内容を登録します。

以下のコードでは1分後にローカル通知が届きます。

// 通知内容を設定
var notification = new AndroidNotification
{
    Title = "お知らせ",
    Text = "お知らせが届いた?",
    SmallIcon = "icon_small",
    LargeIcon = "icon_large",
    FireTime = System.DateTime.Now.AddMinutes(1), // 1分後に通知
};

// 通知をスケジュール
AndroidNotificationCenter.SendNotification(notification, "test_channel");

AndroidNotificationCenterに登録する際は、事前に作成しておいたチャンネルのIdを指定します。

注意する点

iOSAndroidのコードがプロジェクトに混在している場合、そのままだとコンパイルエラーになるので、 条件付きコンパイルを使う必要があります。 具体的には以下の様にします。

#if UNITY_ANDROID
// Android用の通知
#endif

#if UNITY_IOS
// iOS用の通知
#endif

まとめ

今回はローカル通知について解説しました。 Mobile Notificationsパッケージを追加することで、ローカル通知に簡単に対応できます。 iOSAndroidで若干違いがあるので注意が必要です。 またUnity Editor上では通知を確認出来ないため、端末上での動作確認が必須です。 ローカル通知をうまく使えばユーザーに再度アプリを触ってもらうきっかけを作ることが出来ます。 自分で作ったアプリでも使えそうなら活用していきましょう。