Unity是实时3D互动内容创作和运营平台,包括游戏开发、美术、建筑、汽车设计、影视在内的所有创作者,借助Unity将创意变成现实。Unity平台提供一整套完善的软件解决方案,可用于创作、运营和变现任何实时互动的2D和3D内容,支持平台包括手机、平板电脑、PC、游戏主机、增强现实和虚拟现实设备。
随着使用Unity开发的移动应用越来越多,应用类型越来越广泛,移动推送也成为Unity开发的必备功能。但是对于Unity开发者来说,直接使用原生的Android iOS推送SDK,接入比较困难,而且需要修改原生工程,影响Unity的打包流程。为此,我们专门提供了针对Unity的移动推送插件,方便Unity开发者以熟悉方式接入移动推送功能。
环境说明
Unity 2019.4.21f1c1
项目说明
项目地址:下载地址
本项目是一个unity demo项目,Assets/Plugins 目录下为插件代码。
集成操作
1. 安装 Mobile Notifications package
为了避免引入修改导出后的工程,此处我们依赖Mobile Notifications package解决一些通知配置。
参考:https://docs.unity3d.com/Packages/com.unity.mobile.notifications@1.3/manual/index.html
2. 复制 Assets/Plugins 到 unity项目
目前插件直接以文件的方式提供,后续再考虑封装为Unity Package。
3. 启用推送通知
在Unity的IDE中, 选择Edit> Project Settings> Mobile Notifications,在Mobile Notifications页面勾选Enable Push Notifications。
4. 其他通用配置
应用包名或者bundleId配置,需要和推送平台创建的应用一致。
Android启用了Custom Main ManifestCustom Main Gradle TemplateCustom Base Gradle TemplateCustom Proguard File,如果项目有其他地方也需要定制这些文件,请注意合并修改内容。
Android配置
配置推送参数
在Assets/Plugins/Android/AndroidManifest.xml文件中配置推送的appKey和appSecret。
<!-- 请填写阿里云的- appKey appSecret -->
<meta-data
android:name="com.alibaba.app.appkey"
android:value="*******" />
<meta-data
android:name="com.alibaba.app.appsecret"
android:value="*******" />
配置华为厂商通道的appId(可选)
<!-- 华为通道的参数appid -->
<meta-data
android:name="com.huawei.hms.client.appid"
android:value="appid=*******" />
配置小米厂商通道的参数(可选)
<!-- 小米通道的参数 -->
<meta-data
android:name="com.aliyun.ams.push.xiaomi.id"
android:value="id=*******" />
<meta-data
android:name="com.aliyun.ams.push.xiaomi.key"
android:value="id=*******" />
配置oppo厂商通道的参数(可选)
<!-- oppo通道的参数 -->
<meta-data
android:name="com.aliyun.ams.push.oppo.key"
android:value="id=*******" />
<meta-data
android:name="com.aliyun.ams.push.oppo.secret"
android:value="id=*******" />
配置vivo厂商通道的参数(可选)
<!-- vivo通道的参数api_key为appkey -->
<meta-data
android:name="com.vivo.push.api_key"
android:value="*******" />
<meta-data
android:name="com.vivo.push.app_id"
android:value="*******" />
配置魅族厂商通道的参数(可选)
<!-- 魅族通道的参数 -->
<meta-data
android:name="com.aliyun.ams.push.meizu.id"
android:value="id=*******" />
<meta-data
android:name="com.aliyun.ams.push.meizu.secret"
android:value="id=*******" />
初始化时配置Notification Channel,具体请参考Manage notification channels。
iOS配置
iOS参数通过API设置,不需要修改插件文件。
API
接口类为 Assets/Plugins/PushHelper.cs
调用示例
using Aliyun.Push;
public class ClickHandler : MonoBehaviour
{
void Start()
{
#if UNITY_IOS
PushHelper.Init("******", "********", (result, data) => Log("Init " + result + " " + data));
#elif UNITY_ANDROID
PushHelper.Init(null, null, (result, data) => Log("Init " + result + " " + data));
#endif
PushHelper.SetNotificationReceivedCallback((title, content, data) => Log("receive notification " + title + "\n content " + content + "\n data " + data));
PushHelper.SetMessageReceivedCallback((title, content) => Log("receive message " + title + "\n content " + content));
}
public void Register()
{
Log("register push");
PushHelper.Register(this, (result, data) => Log("Register " + result + " " + data));
}
public void BindAccount()
{
Log("BindAccount");
PushHelper.BindAccount("account", (result, data) => Log("BindAccount " + result + " " + data));
}
public void UnBindAccount()
{
Log("UnBindAccount");
PushHelper.UnBindAccount((result, data) => Log("UnBindAccount " + result + " " + data));
}
public void BindTag()
{
Log("BindTag");
PushHelper.BindTag(1, "hello", null, (result, data) => Log("BindAccount " + result + " " + data));
}
public void UnBindTag()
{
Log("UnBindTag");
PushHelper.UnBindTag(1, "hello", null, (result, data) => Log("UnBindTag " + result + " " + data));
}
public void TagList()
{
Log("ListTag");
PushHelper.ListTag(1, (result, data) => Log("ListTag " + result + " " + data));
}
public void BindAlias()
{
Log("AddAlias");
PushHelper.AddAlias("aliasTemp", (result, data) => Log("AddAlias " + result + " " + data));
}
public void UnBindAlias()
{
Log("RemoveAlias");
PushHelper.RemoveAlias("aliasTemp", (result, data) => Log("RemoveAlias " + result + " " + data));
}
public void AliasList()
{
Log("ListAlias");
PushHelper.ListAlias((result, data) => Log("ListAlias " + result + " " + data));
}
public void BindPhone()
{
Log("BindPhone");
PushHelper.BindPhone("1234567****", (result, data) => Log("BindPhone " + result + " " + data));
}
public void UnBindPhone()
{
Log("UnBindPhone");
PushHelper.UnBindPhone((result, data) => Log("UnBindPhone " + result + " " + data));
}
public void GetDeviceId()
{
Log("device id is " + PushHelper.DeviceId());
}
}
一般接口的回调说明
除了接收通知和消息的回调接口,其他回调一般格式为Action<bool, string>。
第一个参数bool表示此次请求是否成功。
第二个参数string 当成功时,表示获取到的数据,当失败时,表示错误信息。
主要方法如下:
Init 初始化推送
必须先初始化,才能正常使用。
Android的AppKey appSecret 通过manifest配置,此处只对iOS生效。
public static void Init(string appKey, string appSecret, Action<bool, string> callback)
Register 注册推送
在初始化之后,必须先注册推送通道,才能正常使用。
public static void Register(MonoBehaviour mono, Action<bool, string> callback)
BindAccount 绑定业务账号
给设备绑定业务账号,绑定之后可以使用账号进行推送,具体请参考:https://help.aliyun.com/document_detail/195008.html?#title-zzo-xuu-r3o
public static void BindAccount(string account, Action<bool, string> callback)
UnBindAccount 解绑业务账号
解绑业务账号,解绑之后不可以使用账号进行推送,具体请参考:https://help.aliyun.com/document_detail/195008.html?#title-yd6-fa8-u5g
public static void UnBindAccount(Action<bool, string> callback)
BindTag 添加标签
给特定对象添加标签,以便使用标签进行推送,具体参数请参考:https://help.aliyun.com/document_detail/195010.html?#title-l97-wc7-904
public static void BindTag(int target, string tag, string alias, Action<bool, string> callback)
UnBindTag 移除标签
给特定对象移除标签,具体请参考:
https://help.aliyun.com/document_detail/195010.html?#title-9r1-7qq-5s5
public static void UnBindTag(int target, string tag, string alias, Action<bool, string> callback)
ListTag 查询标签
查询标签,具体请参考:
https://help.aliyun.com/document_detail/195010.html?#title-6q7-wn0-66t
public static void ListTag(int target, Action<bool, string> callback)
AddAlias 添加别名
给设备添加别名,以便使用别名进行推送,具体请参考:https://help.aliyun.com/document_detail/195011.html?#title-kjd-ybj-odm
public static void AddAlias(string alias, Action<bool, string> callback)
RemoveAlias 移除别名
移除设备别名,具体请参考:
https://help.aliyun.com/document_detail/195011.html?#title-p9d-rqh-8oc
public static void RemoveAlias(string alias, Action<bool, string> callback)
ListAlias 查询别名
查询设备别名,具体请参考:
https://help.aliyun.com/document_detail/195011.html?#title-buq-5yf-r0i
public static void ListAlias(Action<bool, string> callback)
BindPhone 绑定手机号
给设备绑定手机号,用于推送短信融合方案,具体请参考:
https://help.aliyun.com/document_detail/195014.html?#title-t02-yj2-n12。
iOS暂不支持绑定手机号。
public static void BindPhone(string phoneName, Action<bool, string> callback)
UnBindPhone 解绑手机号
解绑设备手机号,具体请参考:
https://help.aliyun.com/document_detail/195014.html?#title-k21-32f-fay
public static void UnBindPhone(Action<bool, string> callback)
SetNotificationReceivedCallback 设置推送接收回调
当通知到达时,回调设置的接口。
Action参数分别是通知标题、通知内容、 通知额外数据。
其中通知额外数据,对应推送接口中iOSExtParameters 和 AndroidExtParameters中以data为key的数据。
public static void SetNotificationReceivedCallback(Action<string, string, string> notificationReceivedCallback)
SetMessageReceivedCallback 设置消息接收回调
当消息到达时,回调设置的接口。
Action的参数分别是消息标题和消息内容。
public static void SetMessageReceivedCallback(Action<string, string> messageReceivedCallback)
DeviceId 获取推送设备标识
获取设备标识,可以基于设备进行推送。
public static string DeviceId()