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);
}
これでキャンセルも成功しました。他昨日は後ほど。
コメント