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 -->
<permission
android: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-feature
android:name="android.hardware.vulkan.version"
android:required="false" />
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<uses-feature
android:name="android.hardware.touchscreen.multitouch"
android:required="false" />
<uses-feature
android:name="android.hardware.touchscreen.multitouch.distinct"
android:required="false" />
<application
android:allowBackup="false"
android:label="@string/app_name">
<activity android:name="包名.MainActivity"></activity>
<!-- For test only. Demo 的主程序 start -->
<activity
android: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-data
android:name="android.notch_support"
android:value="true" />
</activity>
<!-- For test only. 测试的主程序 end -->
<!-- Rich push 核心功能 since 2.0.6 -->
<activity
android:name="cn.jpush.android.ui.PopWinActivity"
android:exported="false"
android:theme="@style/MyDialogStyle"></activity>
<!-- Required SDK核心功能 -->
<activity
android: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放在其他进程中 -->
<service
android: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 核心功能 -->
<provider
android:name="cn.jpush.android.service.DataProvider"
android:authorities="包名.DataProvider"
android:exported="false"
android:process=":pushcore" />
<!-- since 1.8.0 option 可选项。用于同一设备中不同应用的JPush服务相互拉起的功能。
-->
<!-- 若不启用该功能可删除该组件,将不拉起其他应用也不能被其他应用拉起 -->
<service
android: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 核心功能 -->
<provider
android:name="cn.jpush.android.service.DownloadProvider"
android:authorities="包名.DownloadProvider"
android:exported="true" />
<!-- Required SDK核心功能 -->
<receiver
android: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核心功能 -->
<receiver
android: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核心功能 -->
<activity
android: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
-->
<service
android: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-data
android:name="JPUSH_CHANNEL"
android:value="developer-default" />
<meta-data
android:name="JPUSH_APPKEY"
android:value="这里是JPush平台申请的APPKEY" />
<!-- </>值来自开发者平台取得的AppKey -->
<meta-data
android:name="unity.splash-mode"
android:value="0" />
<meta-data
android:name="unity.splash-enable"
android:value="True" />
<meta-data
android:name="android.max_aspect"
android:value="2.1" />
<meta-data
android:name="notch.config"
android:value="portrait|landscape" />
<meta-data
android: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 种设计模式的分类和功能