Unity 本地推送 Mobile Notifications
文章目录
一、Android接入
1. 简介
Unity 官方本地Push解决方案,支持一次性或重复通知
最新版本:2.1.1,支持Unity 2020.3及以上版本,支持Android5(API 21)和iOS 10.0+
官方文档地址
2.环境
Unity:2020.3
MobileNotification::2.0.2
测试设备:Android12
3.接入Push
- 导入Package
Unity-Windows-PackageManaget,Packages选择Unity Registry,搜索Mobile Notifications,右下角点击"Install"。(本地已经安装过了,故显示Remove)
- 引入命名空间
using Unity.Notifications.Android;
- 创建通知渠道Channel
var channel = new AndroidNotificationChannel()
{
Id = m_ChannelID,
Name = m_ChannelName,
Importance = Importance.High,
Description = m_ChannelDescription
};
AndroidNotificationCenter.RegisterNotificationChannel(channel);
通知渠道(Channel):Android引入了通知渠道notificationchannels以提供统一的系统来帮助用户管理通知如果是针对androido为目标平台时必须实现一个或者多个通知渠道以向用户显示通知 。
public AndroidNotificationChannel(string id, string name, string description, Importance importance)
Type | Name | Description |
---|---|---|
string | id | Channel ID (记住ID) |
string | name | Channel名称 |
string | description | Channel 描述 |
Importance | id | Channel重要程度,一般默认Importance.Default |
- 创建通知
var notification = new AndroidNotification();
notification.Title = "Title";
notification.Text = "Content";
notification.FireTime = dateTime;
notification.ShouldAutoCancel = true;
notification.SmallIcon = "icon_48";
notification.LargeIcon = "logo2";
notification.IntentData = "{"data":1}"; //通知传递的信息
notification.Color = Color.red;
AndroidNotificationCenter.SendNotification(notification, m_ChannelID);
图标说明:
只有添加到此列表或手动添加到“res/drawable”文件夹的图标才能用于通知。
注意,并非所有设备都支持彩色图标。
小图标必须至少为48x48px,并且只由透明背景上的白色像素组成。
大图标必须不小于192x192px,并且可以包含颜色。
Type | Name | Description |
---|---|---|
string | Title | 通知标题 |
string | Text | Channel通知内容 |
DateTime | FireTime | 发送时间 |
string | SmallIcon | 通知左上角小图标 |
Color | Color | 通知左上角小图标背景颜色 |
string | LargeIcon | 通知右上角大图标 |
string | IntentData | 通知传递的信息 |
bool | ShouldAutoCancel | 是否自动取消通知(点击通知后,自动删除) |
- 通知图标设置
(1)MobileNotification设置管理图片,如图所示,可以生成若干大图和小图,并设置图标标识,在生成通知时,通过该标识设置图标
(2)Assets-Plugin-Android-res-drawable文件夹下,放入图标,创建通知时,通过名称设置图标
- 发送通知
AndroidNotificationCenter.SendNotification(notification, m_ChannelID)
- 取消通知
//取消指定ID通知
AndroidNotificationCenter.CancelNotification(data.Id);
//取消全部通知
AndroidNotificationCenter.CancelAllNotifications();
//取消所有未完成的通知
AndroidNotificationCenter.CancelAllScheduledNotifications();
//取消所有已经显示的通知
AndroidNotificationCenter.CancelAllDisplayedNotifications();
- 获取通知状态
AndroidNotificationCenter.CheckScheduledNotificationStatus(notificationId);
- 注册通知点击回调
AndroidNotificationCenter.OnNotificationReceived += OnReceivedNotificationHandler;
/// <summary>
/// 通知点击回调
/// </summary>
/// <param name="data"></param>
private void OnReceivedNotificationHandler(AndroidNotificationIntentData data)
{
var msg = "Notification received : " + data.Id + "n";
msg += "n Notification received: ";
msg += "n .Title: " + data.Notification.Title;
msg += "n .Body: " + data.Notification.Text;
msg += "n .Channel: " + data.Channel;
Debug.Log("[MobileNotification] msg: " + msg);
var notificationIntentData = AndroidNotificationCenter.GetLastNotificationIntent();
if (notificationIntentData != null)
{
var id = notificationIntentData.Id;
var channel = notificationIntentData.Channel;
var notification = notificationIntentData.Notification;
Debug.Log("[MobileNotification] IntentData: " + notification.IntentData);
Debug.Log("[MobileNotification] CancelNotification: " + id);
}
else
{
Debug.Log("[MobileNotification] GetLastNotificationIntent failed");
}
Debug.Log("[MobileNotification] Status:" + AndroidNotificationCenter.CheckScheduledNotificationStatus(data.Id));
//AndroidNotificationCenter.CancelNotification(data.Id);
//ToDo
}
- 替换通知
AndroidNotificationCenter.UpdateScheduledNotification(id, newNotification, "channel_id");
- 通知展示
二、Q&A
- “Sending contentIntent failed: android.app.PendingIntent$CanceledException”
(1)现象: 点击通知栏,没有启动APP,错误信息如图
(2)原因: 项目为了遮挡游戏启动黑屏,扩展Unity的Activity,Plugin/Android/AndroidManifest.xml中配置的并不是默认的"com.unity3d.player.UnityPlayerActivity",导致找不到要启动的Activity
(3)方法: “Editor-Project Settings-Mobile Notigficationd”,勾选"Use Custom Activity",并将扩展后的Activity名称填入即可