Unity接SDK - 极光推送

2023-11-06

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);
    }
}

接着打包发布,然后查看结果就好。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity接SDK - 极光推送 的相关文章

  • Android Marshmallow 6.0.1 蓝牙扫描未返回结果

    根据 Kitkat 4 4 4 的 update appCompat 使用以下代码和权限 6 01 中的蓝牙似乎无法按预期工作 没有返回任何结果 并且我附近有几个可发现的设备 有人对为什么有任何见解吗 我在 Nexus 5 上运行
  • Android sdk内容加载器错误[重复]

    这个问题在这里已经有答案了 我在用日食朱诺win 7 32位平台上的版本 一切都很顺利 直到今天当我启动 Eclipse 时 Android sdk 内容加载器不能超过 0 我尝试重新启动 Eclipse 我结束了 adb 进程并再次重新启
  • 包 android.support.v4.app 不存在;在Android Studio 0.8中

    我最近将 android studio IDE 更新至 0 8 以与新的 android L SDK 配合使用 首先 我导入了一个已完成的 android 项目 该项目在旧版本的 android studio 中没有收到任何错误 在版本 0
  • NSOperation、观察者和线程错误

    我有一个问题NSOperation和观察员 I ve a tabbarcontroller and a splashController 我想要启动画面加载并下载文件 并在下载文件时使tabbarcontroller出现在屏幕上 问题是我有
  • (Eclipse SDK更新错误)收集要安装的项目时发生错误

    我刚刚更新了ADK 遇到了和这个家伙完全相同的问题 相同版本的升级 无法从 22 3 0 更新 ADT 到22 6 1 没有发现更新 https stackoverflow com questions 22525178 cannot upd
  • Android SDK 管理器未安装组件

    不确定我在这里做错了什么 我安装了 Android SDK Manager 现在正在尝试安装 Android Dev 网站建议的平台 单击安装后 我收到一条错误消息 指出管理器无法在 Android 目录中创建临时文件夹 所以我创造了它 现
  • iOS SDK Hue 飞利浦与 Swift

    我尝试在 Objective C 中为 Hue 导入 iOS SDK 我按照这里的说明进行操作 https github com PhilipsHue PhilipsHueSDK iOS OSX https github com Phili
  • 无法解析“adb version”的输出

    我使用 Ubuntu 11 10 和 Eclipse 进行 Android 开发 我已经创建了一个新项目 但它包含错误 Failed to parse the output of adb version 如果有人知道我该如何解决这个问题 我
  • Android Gradle:找不到符号变量

    我在使用 gradle 构建时遇到错误 如下所示 error cannot find symbol variable image name 我在用着ContextCompat getDrawable getActivity R drawab
  • 无法启动 UI Automator 查看器

    我无法启动 UI Automator 查看器 任何人都可以帮助我吗 我怎样才能启动它 当我双击 uiautomatorviewer 一段时间时 黑色窗口打开但自动关闭 即使我在 Windows 路径变量中设置了变量 ANDROID HOME
  • 如何在Android中将外部jar文件包含到aar文件中

    我想开发一个解决方案 允许我在 Android 项目的 aar 文件中生成的 SDK 中使用外部 jar 库 我有什么输入 SDK de xx sdk xxx android v1 0 0 外部库 libs xxxx v1 0 0 我在调查
  • Android:如何设计智能手机和平板电脑的应用程序?

    我知道已经有很多了博客文章 http android developers blogspot com 2011 02 android 30 fragments api html how to s http developer android
  • 如何在android sdk中从图库中获取图像并将其显示到屏幕上

    我想知道如何从图库中获取预先保存的图像 然后将其显示到屏幕上 任何教程 有用的链接和信息将不胜感激 如果您希望我进一步解释任何内容 请询问 Intent photoPickerIntent new Intent Intent ACTION
  • QuickBlox:arm64 架构的未定义符号

    我使用 Xcode 6 4 并使用 cocoapods 安装了 QuickBlox 框架 使用该框架后 我收到一些错误 例如 Undefined symbols for architecture arm64 OBJC CLASS QBSet
  • waitUntilObjectExists() Amazon S3 PHP SDK 方法,它到底是如何工作的?

    该函数是否会暂停 php 脚本 直到在 s3 服务器上找到该对象 我将它放在 foreach 循环中 一张一张地上传图像 找到对象后 我调用一个方法在本地删除图像 然后删除本地文件夹 如果为空 这是正确的处理方式吗 谢谢 foreach f
  • 如何在Android Studio中安装android 6.0.1模拟器?

    我在我的 Android 模拟器上遇到这个问题E Surface getSlotFromBufferLocked 未知缓冲区 0xab7519c0 https stackoverflow com questions 33046375 e s
  • Android 操作系统上的 NFC 堆栈

    有人可以帮助我了解 NFC Android 堆栈的当前状态吗 随着OS 2 3发布了小型 NFC 支持 仅限于 NXP 标签读取 后来 Google 增强了 API 所以在OS 2 3 3支持更广泛的标签 并且还可以使用 p2p 我的问题是
  • 解析迁移到 mLabs 和 Heroku 的错误

    我至少一年前将解析数据库迁移到 Mlabs 从那时起我就一直在开发该应用程序 解析仪表板表示我已成功迁移 Mlab 和 Parse 都收到了数据库的更新 然而 在过去一两周内 该应用程序不再经过登录页面 没有调整代码 这是服务器问题 以下是
  • 双击并滑动/拖动手指以放大/缩小

    如果有人使用过 iOS 版谷歌地图应用程序 那么它有一个很棒的功能 可以用一根手指放大 缩小 双击 uiscrollview 然后立即向上或向下滑动手指以放大 缩小 有谁知道这是如何实现的 谷歌发布了任何片段吗 我将此功能添加到我的 UIS
  • 如何在 Swift 中显示框架(SDK)中的视图控制器?

    我在 Objective C 中有自己生成的框架 SDK 它在我的 Swift iOS 项目中使用 我想调用我的初始控制器CCInitViewController 请参阅第一张图片 从我的 SDK 单击按钮 位于 App Controlle

随机推荐

  • 计算机网络01之计算机网络分层结构

    计算机网络01 1 计算机网络分层结构 1 下层为上层提供服务 SDU数据单元 为完成用户所要求功能而应传送的数据 PCI协议控制单元 控制协议操作的信息 PDU协议数据单元 对等层次之间传送的数据单位 2 OSI 7层参考模型 OSI 7
  • 微分中值定理定义及几何意义

    微分中值定理定义及几何意义 1 罗尔定理 2 拉格朗日中值定理 3柯西中值定理 1 罗尔定理 如果函数f x 满足 1 在闭区间 a b 上连续 2 在开区间 a b 内可导 3 f a f b 则在 a b 内至少有一点 a b 使得f
  • QT信号和槽

    系列文章目录 提示 这里可以添加系列文章的所有文章的目录 目录需要自己手动添加 例如 第一章 Python 机器学习入门之pandas的使用 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 系列文章目录 前言 一
  • Node.js后端开发 - 基础篇 #2 全局对象

    文章目录 一 前言 二 全局对象 1 console打印输出 2 setTimeout超时输出 3 setInterval循环间隔输出 4 clearInterval 清除循环间隔输出 5 dirname输出当前所在目录 6 filenam
  • 周志华 机器学习 Day26

    学习与推断 基于概率图模型定义的联合概率分布 我们能对目标变量的边际分布或以某些可观测变量为条件的条件分布进行推断 边际分布是指对无关变量求和或积分后得到的结果 例如在马尔可夫网中 变量的联合分布呗表示成极大团的势函数乘积 于是 给定参数
  • 华为OD机试 - 不含101的数(Java)

    题目描述 小明在学习二进制时 发现了一类不含 101的数 也就是 将数字用二进制表示 不能出现 101 现在给定一个整数区间 l r 请问这个区间包含了多少个不含 101 的数 输入描述 输入的唯一一行包含两个正整数 l r 1 l r 1
  • NodeMcu arduino ESP8266 使用WIFIManager 库

    WiFiManager库使用说明 提示 这里可以添加系列文章的所有文章的目录 目录需要自己手动添加 例如 第一章 Python 机器学习入门之pandas的使用 提示 写完文章后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 W
  • matlab作出马鞍面,[2018年最新整理]实验一马鞍面绘制实验.ppt

    2018年最新整理 实验一马鞍面绘制实验 10 实验一 马鞍面绘图实验 实验目的和实验内容 实验原理 实验相关的思考问题 熟悉几个函数 mesh contour linspace figure 显示图形框 mesh X Y Z Meshz
  • 项目上线后遇到的问题总结

    项目上线了 一堆堆的问题也随之出现了 除了时间比较匆忙导致没有细致的做验证之外 当初也确实没有在最重要的功能需求上把好关 导致后来要做很多的修改而弥补之前的错误 下面是上线后遇到的问题和解决办法总结 问题一 用户非正常流程导致的错误 用户注
  • 【读书笔记->统计学】07-03 离散型概率分布-泊松分布概念简介

    泊松分布 假设一个情境 下星期电影院有一个大型促销 影院经理希望一切都完美无缺 爆米花机每一周的平均故障次数为3 4 或者说爆米花机的故障率为3 4 求爆米花机下一周不发生故障的概率有多大 如果预计故障太多次 就打算买个新的爆米花机了 与前
  • 嵌入式系统编程中常用的回调处理

    在嵌入式编程中经常看到形如下图所示的一些函数调用或者函数初始化 这种形式的原理 以及在编程过程中能带来什么好处 可以通过下面这篇文章来简单的解释和说明 函数是C语言的核心概念 主调函数 caller 调用被调函数 callee 是一般的调用
  • 用《文心一言》1分钟写一篇博客简直yyds

    文章目录 前言 文心一言是什么 文心一言可以做什么 文心一言写博客 申请体验 写在最后 创作者 全栈弄潮儿 个人主页 全栈弄潮儿的个人主页 个人社区 欢迎你的加入 全栈弄潮儿的个人社区 专栏地址 AI大模型 前言 当今社会 博客已成为了许多
  • Java从List中删除元素的正确用法

    还是先举个例子 你侄女对天文知识感兴趣 然后你就用程序写了太阳系九大星系 水星 金星 地球 火星 木星 土星 天王星 海王星 冥王星 的运行轨迹图 然后拿给侄女看 然后她说错了错了 你的知识太旧了 多了一颗星 根据2006年8月24日国际天
  • 把每八行格式重复的txt文件导入数据库

    记录代码 private static String url unic useUnicode true characterEncoding utf8 public static void main String args throws SQ
  • Java思维编程

    编程思维可以具体分为四个方面 分解 拥有编程思维的人 会把一个复杂的大问题 拆解成更可执行 更好理解的小步骤 复杂问题很难一下子破解 但如果把它细分成很多个小问题 逐步解决 就容易多了 模式识别 什么是模式识别呢 所谓识别模式 其实就意味着
  • JAVA基础之单元测试

    目录 1 单元测试介绍 2 环境搭建 2 1 JUnit 4 2 2 JUnit 5 3 快速上手 3 1 JUnit 4 3 2 JUnit 5 1 单元测试介绍 单元测试就是针对最小的功能单元编写测试代码 Java程序最小的功能单元是方
  • 区块链四:共识机制——PBFT算法深入讲解

    TOC 背景介绍 共识机制是区块链一大知识领域 作用就是维持分布式节点间的一致性 从而支撑去中心化 早在区块链之前 就存在各种分布式的共识机制 共识机制不是因区块链所发明 但区块链却对共识机制推广和进步有着重要影响 共识算法分类 按应用场景
  • Python 超简单实现人类面部情绪的识别

    还记得我们之前写过一篇文章 手把手教你人脸识别自动开机 吗 里面用OpenCV对人脸进行简单的识别 让计算机训练认识到某个特定人物后识别对象 今天来做点高级的 识别出人脸的情绪 本文分为两大部分 1 面部检测 检测图像的脸部位置 输出边界框
  • 《现代控制系统》第五章——反馈控制系统性能分析 5.4 二阶系统里面极点以及零点带来的影响

    上一节图里面描绘的曲线 仅仅是针对阶跃响应为 的系统来说的 但是这给我们提供了一个很好的例子 许多系统拥有成对的主极点 我们可以通过类似上图的关系来估计系统的阶跃响应 这个方法尽管只是一个估算 但却能在避免拉普拉斯转化的情况下提供一个对超调
  • Unity接SDK - 极光推送

    2021 09 09记录 2023发布 如有不对 还请包含 发晚了 如果想看Android原生接入JPush SDK 移步Android原生集成JPush SDK jpush android sdk v4 7 2 极光推送 接入 版本 Un