通知とは?
iOS
,Android
のアプリには通知機能がありますが、
ユーザーがスマートフォンを手にしていない時にアプリを起動するきっかけを与えるものです。
通知には
- プッシュ通知
- ローカル通知
の2種類があります。
プッシュ通知はサーバー側からアプリ側へ通知を送るものです。
一方ローカル通知はサーバーを使用せずアプリ内から指定した時間後に通知を送るものです。
Unity
には公式に通知用のパッケージが提供されています。
今回はローカル通知のみ解説します。
Mobile Notificationsパッケージをインストールする
Unity Editor
のメニューから
Window
→Package Manager
を選択し、Package Manager
を開きます。
Package Manager
からMobile Notifications
を選択し、Install
ボタンを押します。
インストールが完了するまで待ちます。
ローカル通知の基本
まず、iOS
とAndroid
プラットフォームのみ対応しています。
アプリ側で通知するべき時が分かっている必要があります。
例えば、
- 毎日特定の時間に通知する
- スタミナが全回復する時間に通知する
などです。
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を指定します。
注意する点
iOS
とAndroid
のコードがプロジェクトに混在している場合、そのままだとコンパイルエラーになるので、
条件付きコンパイルを使う必要があります。
具体的には以下の様にします。
#if UNITY_ANDROID
// Android用の通知
#endif
#if UNITY_IOS
// iOS用の通知
#endif
まとめ
今回はローカル通知について解説しました。
Mobile Notifications
パッケージを追加することで、ローカル通知に簡単に対応できます。
iOS
とAndroid
で若干違いがあるので注意が必要です。
またUnity Editor
上では通知を確認出来ないため、端末上での動作確認が必須です。
ローカル通知をうまく使えばユーザーに再度アプリを触ってもらうきっかけを作ることが出来ます。
自分で作ったアプリでも使えそうなら活用していきましょう。