Unity接SDK - 极光推送
2021.09.09记录,2023发布,如有不对,还请包含。发晚了
如果想看Android原生接入JPush - SDK,移步Android原生集成JPush SDK_jpush android sdk v4.7.2
极光推送 - 接入
版本:
- Unity 2020.3.10f1
- JPush - Unity 3.2.0
官方插件:GitHub - jpush/jpush-unity3d-plugin: JPush's officially supported Unity3d plugin (Android & iOS). 极光推送官方支持的 Unity3d 插件(Android & iOS)。
下载Zip压缩包解压,然后把Plugins文件及其子文件全部复制到Unity的Assets下:
先做一件事,打开我们的AndroidManifest文件,然后更改文件内容,把包名全部替换为工程包名,然后替换其中的APPKEY为官网申请相对应软件的APPKEY值。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="包名"><!-- Required --><permissionandroid:name="包名.permission.JPUSH_MESSAGE"android:protectionLevel="signature" /><!-- Required 一些系统要求的权限,如访问网络等 --><uses-permission android:name="包名.permission.JPUSH_MESSAGE" /><uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><!-- Optional for location --><uses-permission android:name="android.permission.VIBRATE" /><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /><!-- 用于开启 debug 版本的应用在6.0 系统上 层叠窗口权限 --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /><!-- Android Q后台定位权限 --><uses-permission
android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /><uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /><uses-permission android:name="android.permission.GET_TASKS" /><uses-feature android:glEsVersion="0x00030000" /><uses-featureandroid:name="android.hardware.vulkan.version"android:required="false" /><uses-featureandroid:name="android.hardware.touchscreen"android:required="false" /><uses-featureandroid:name="android.hardware.touchscreen.multitouch"android:required="false" /><uses-featureandroid:name="android.hardware.touchscreen.multitouch.distinct"android:required="false" /><applicationandroid:allowBackup="false"android:label="@string/app_name"><activity android:name="包名.MainActivity"></activity><!-- For test only. Demo 的主程序 start --><activityandroid:name="cn.jiguang.unity.push.UnityPluginActivity"android:configChanges="orientation|keyboardHidden|screenSize"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><meta-dataandroid:name="android.notch_support"android:value="true" /></activity><!-- For test only. 测试的主程序 end --><!-- Rich push 核心功能 since 2.0.6 --><activityandroid:name="cn.jpush.android.ui.PopWinActivity"android:exported="false"android:theme="@style/MyDialogStyle"></activity><!-- Required SDK核心功能 --><activityandroid:name="cn.jpush.android.ui.PushActivity"android:configChanges="orientation|keyboardHidden"android:exported="false"android:theme="@android:style/Theme.NoTitleBar"><intent-filter><action android:name="cn.jpush.android.ui.PushActivity" /><category android:name="android.intent.category.DEFAULT" /><category android:name="包名" /></intent-filter></activity><!-- Required SDK 核心功能 --><!-- 可配置android:process参数将PushService放在其他进程中 --><serviceandroid:name="cn.jpush.android.service.PushService"android:exported="false"android:process=":pushcore"><intent-filter><action android:name="cn.jpush.android.intent.REGISTER" /><action android:name="cn.jpush.android.intent.REPORT" /><action android:name="cn.jpush.android.intent.PushService" /><action android:name="cn.jpush.android.intent.PUSH_TIME" /></intent-filter></service><!-- since 3.0.9 Required SDK 核心功能 --><providerandroid:name="cn.jpush.android.service.DataProvider"android:authorities="包名.DataProvider"android:exported="false"android:process=":pushcore" /><!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。
--><!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 --><serviceandroid:name="cn.jpush.android.service.DaemonService"android:enabled="true"android:exported="true"><intent-filter><action android:name="cn.jpush.android.intent.DaemonService" /><category android:name="包名" /></intent-filter></service><!-- since 3.1.0 Required SDK 核心功能 --><providerandroid:name="cn.jpush.android.service.DownloadProvider"android:authorities="包名.DownloadProvider"android:exported="true" /><!-- Required SDK核心功能 --><receiverandroid:name="cn.jpush.android.service.PushReceiver"android:enabled="true"android:exported="false"><intent-filter android:priority="1000"><action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY"
/><!-- Required 显示通知栏 --><category android:name="包名" /></intent-filter><intent-filter><action android:name="android.intent.action.USER_PRESENT" /><action android:name="android.net.conn.CONNECTIVITY_CHANGE" /></intent-filter><!-- Optional --><intent-filter><action android:name="android.intent.action.PACKAGE_ADDED" /><action android:name="android.intent.action.PACKAGE_REMOVED" /><data android:scheme="package" /></intent-filter></receiver><!-- Required SDK核心功能 --><receiverandroid:name="cn.jpush.android.service.AlarmReceiver"android:exported="false" /><!-- since 3.3.0 接收JPush相关事件 --><receiver android:name="cn.jiguang.unity.push.JPushEventReceiver"><intent-filter><action android:name="cn.jpush.android.intent.RECEIVE_MESSAGE" /><category android:name="包名"></category></intent-filter></receiver><!-- since 3.3.0 Required SDK核心功能 --><activityandroid:name="cn.jpush.android.service.JNotifyActivity"android:exported="true"android:taskAffinity="jpush.custom"android:theme="@android:style/Theme.Translucent.NoTitleBar"><intent-filter><action android:name="cn.jpush.android.intent.JNotifyActivity" /><category android:name="包名" /></intent-filter></activity><!-- since 3.3.0 Required SDK 核心功能 --><!-- 可配置android:process参数将PushService放在其他进程中 --><!-- User defined. For test only 继承自cn.jpush.android.service.JCommonService
--><serviceandroid:name="cn.jiguang.unity.push.PushService"android:process=":pushcore"><intent-filter><action android:name="cn.jiguang.user.service.action" /></intent-filter></service><!-- Required . Enable it you can get statistics data with channel --><meta-dataandroid:name="JPUSH_CHANNEL"android:value="developer-default" /><meta-dataandroid:name="JPUSH_APPKEY"android:value="这里是JPush平台申请的APPKEY" /><!-- </>值来自开发者平台取得的AppKey --><meta-dataandroid:name="unity.splash-mode"android:value="0" /><meta-dataandroid:name="unity.splash-enable"android:value="True" /><meta-dataandroid:name="android.max_aspect"android:value="2.1" /><meta-dataandroid:name="notch.config"android:value="portrait|landscape" /><meta-dataandroid:name="unity.build-id"android:value="380dd5c3-e02d-40fc-babf-8ecc0e24faf6" /></application></manifest>
还有一个坑记录一下,就是Unity需要设置AndroidManifest为自定模式,然后选择我们更改后的文件,不然打包出来程序启动后,JPush会提示各种问题,总结下来就是一个问题:包名不一致。
至此,JPushSKD相关内容已全部放入到Unity中
接下来我们要开始写代码,注册事件:
Push官网推荐我们在开发阶段中,在Init前开启调试模式,所以我们调用JPushBinding.SetDebug(true);
紧接着我们初始化,参数是游戏场景中一个拥有唯一名字的物体,用来接收JPush传递的参数。
接着我们去JPush官网开始推送消息
会Unity与原生交互的同学就知道了,原生会通过我们发送的对应物体名字,找到其中函数,在函数被触发后,再次调用Unity相关物体下的对应函数。
using JPush;
using UnityEngine;public class Routation : MonoBehaviour
{void Start(){JPushBinding.SetDebug(true);JPushBinding.Init(this.name);}// 开发者自己处理由 JPush 推送下来的消息。void OnReceiveMessage(string jsonStr){Debuger.Log("recv----message-----" + jsonStr);}/ 接收到的内容格式为如下内容:* {* "msgid":"xxxxxxxxxxxxxxxx"* "extras":* { * "key1": "value1"* "key2": "value2"* }* "title":"相关标题"* "content":"相关内容"* } * * 我们常用到的函数为:* OnReceiveNotification* OnOpenNotification* * 在一些高级应用中,我们会触发其他函数:* OnJPushTagOperateResult* OnJPushAliasOperateResult* OnGetRegistrationId* OnMobileNumberOperatorResult*/void OnReceiveNotification(string jsonStr){Debuger.Log("recv---notification---" + jsonStr);}void OnOpenNotification(string jsonStr){Debuger.Log("recv---openNotification---" + jsonStr);}/// <summary>/// JPush 的 tag 操作回调。/// </summary>/// <param name="result">操作结果,为 json 字符串。</param>void OnJPushTagOperateResult(string result){Debuger.Log("JPush tag operate result: " + result);}/// <summary>/// JPush 的 alias 操作回调。/// </summary>/// <param name="result">操作结果,为 json 字符串。</param>void OnJPushAliasOperateResult(string result){Debuger.Log("JPush alias operate result: " + result);}void OnGetRegistrationId(string result){Debuger.Log("JPush on get registration Id: " + result);}void OnMobileNumberOperatorResult(string result){Debuger.Log("JPush On Mobile Number Operator Result: " + result);}
}
接着打包发布,然后查看结果就好。
- 博客杂货铺
- GoF23 种设计模式的分类和功能