跳转至

发送本地推送

HIVE 提供了一种功能,可以通过从游戏客户端向设备注册推送通知来用作游戏闹钟,而无需推送服务器。这被称为本地推送。Hive SDK 提供本地推送注册和释放功能。注册的本地推送将在您关闭应用程序时仍会在指定时间通知您,并且可以根据需要取消注册已注册的本地推送。

Note
  • 在 Android 4.4 (KitKat) API Level 19 及更高版本上,发送和接收本地推送的状态无法保证。

  • Android操作系统限制推送通知以最小化电池使用。

本地推送数据

HIVE在LocalPush类中定义了本地推送数据,内容如下。

名称 类型 描述
noticeId 整数 本地推送消息的标识符
title 字符串 本地推送消息的标题
msg 字符串 本地推送消息的内容
after 整数 推送注册与消息弹出之间的间隔(单位:秒,默认=0)
groupId 字符串 这是通知组的组ID。通知组在用户设备上以组的形式显示来自同一应用程序的通知。如果您没有为此设置值,本地推送消息将显示在默认应用组中。

注册本地推送

要在用户设备上注册本地推送通知,请调用Push类的registerLocalPush()方法。

Note

在 iOS 上,注册本地推送通知的最大数量为 64,并且根据设备和操作系统的版本,可能会限制为少于 64。如果您注册的通知超过限制,它将按顺序丢弃最旧的通知。 (链接)

以下是注册本地推送的示例代码。

API 参考: hive.Push.registerLocalPush

using hive;    
    LocalPush localPush = new LocalPush ();    
    localPush.noticeId = 1;    
    localPush.title = "本地推送标题";    
    localPush.msg = "本地推送消息";    
    localPush.after = 5;    
    localPush.groupId = "a";    

    Push.registerLocalPush(localPush, (ResultAPI result, LocalPush localPush) => {    
         if (result.isSuccess()) {    
             // call successful    
         }    
});
#include "HivePush.h"

FHiveLocalPush 本地推送;
本地推送.NoticeId = 1;
本地推送.Title = TEXT("本地推送标题");
本地推送.Msg = TEXT("本地推送消息");
本地推送.After = 5;
本地推送.GroupId = TEXT("a");

FHivePush::RegisterLocalPush(LocalPush, FHivePushOnLocalPushDelegate::CreateLambda([this](const FHiveResultAPI& Result, const FHiveLocalPush& LocalPush) {
        if (Result.IsSuccess()) {
                // API调用成功
        }
}));

API 参考: Push::registerLocalPush

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    LocalPush localPush;    
    localPush.noticeId = 1;    
    localPush.title = "Local Push Title";    
    localPush.msg = "Local Push Message";    
    localPush.after = 5;    
    localPush.groupId = "a";    

    Push::registerLocalPush(localPush, [=](ResultAPI result, LocalPush localPush){    
         if (result.isSuccess()) {    
             // call successful    
         }    
});

API 参考: registerLocalPush

import com.hive.Push    
    import com.hive.ResultAPI    
    val localPush = Push.LocalPush().apply {    
         noticeID = 1    
         title = "Local Push Title"    
         msg = "Local Push Message"    
         after = 5    
         groupId = "a"    
    }    
    Push.registerLocalPush(localPush, object : Push.LocalPushListener {    
         override fun onRegisterLocalPush(result: ResultAPI, localPush: Push.LocalPush?) {    
             if (result.isSuccess) {    
                 // call successful    
             }    
         }    
})

API 参考: com.hive.Push.registerLocalPush

import com.hive.Push;    
    import com.hive.ResultAPI;    
    Push.LocalPush localPush = new Push.LocalPush();    
    localPush.setNoticeID(1);    
    localPush.setTitle("Local Push Title");    
    localPush.setMsg("Local Push Message");    
    localPush.setAfter(5);    
    localPush.setGroupId("a");    
    Push.INSTANCE.registerLocalPush(localPush, (result, localPushData) -> {    
         if (result.isSuccess()) {    
             // call successful    
         }    
});

API 参考: registerLocalPush(_:handler:)

import HIVEService    
    let localPush = LocalPush()    
    localPush.noticeId = 1;    
    localPush.title = "Local Push Title";    
    localPush.msg = "Local Push Message";    
    localPush.after = 5;    
    localPush.groupId = "a";    
    PushInterface.registerLocalPush(localPush) { result, localPush in    
    if result.isSuccess() {    
    // call successful    
    }    
}

API 参考: Objective-C

#import <HIVEService/HIVEService-Swift.h>    
    HIVELocalPush *localPush = [[HIVELocalPush alloc] init];    
    localPush.noticeId = 1;    
    localPush.title = @"本地推送标题";    
    localPush.msg = @"本地推送消息";    
    localPush.after = 5;    
    localPush.groupId = @"a";    

    [HIVEPush registerLocalPush: localPush handler: ^(HIVEResultAPI *result, HIVELocalPush *localPush) {    
         if ([result isSuccess]) {    
             // call successful    
         }    
}];

取消本地推送

您可以在指定的通知时间之前取消注册已注册的本地推送通知。

注销已注册的本地推送 使用以下API,将注册的推送标识符作为参数(noticeId),并注销本地推送。

API 参考: hive .Push.unregisterLocalPush

using hive;    
    int noticeId = 1; // local push unique ID    
Push.unregisterLocalPush(noticeId);
#include "HivePush.h"

int32 通知ID = 1; // 本地推送唯一ID 

FHivePush::UnregisterLocalPush(NoticeID);

API 参考: Push ::unregisterLocalPush

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    int noticeId = 1; // local push unique ID    
Push::unregisterLocalPush(noticeId);

API 参考: Push.unregisterLocalPush

import com.hive.Push    
    val noticeId = 1 // local push unique ID    
Push.unregisterLocalPush(noticeId)

API 参考: com .hive.Push.unregisterLocalPush

import com.hive.Push;    
    int noticeId = 1; // local push unique ID    
Push.INSTANCE.unregisterLocalPush(noticeId);

API 参考: PushInterface .unregisterLocalPush

import HIVEService    
    let noticeId = 1 // local push unique ID    
PushInterface.unregisterLocalPush(noticeId)

API 参考: HIVEPush ::unregisterLocalPush

#import <HIVEService/HIVEService-Swift.h>    
    NSInteger noticeId = 0; // local push unique ID    
[HIVEPush unregisterLocalPush: noticeId];

一次性注销列出的本地推送

使用以下 API,您可以创建已注册的本地推送标识符列表,并一次性注销本地推送。

API 参考: hive.Push .unregisterLocalPushes

using hive;    
    List noticeIds = new List { 1, 2, 3 }();    
Push.unregisterLocalPushes(noticeIds);
#include "HivePush.h"

TArray<int32> NoticeIds = { 1, 2, 3 };

FHivePush::UnregisterLocalPushes(NoticeIds);

API 参考: Push:: unregisterLocalPushes

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
    vector noticeIds = { 1, 2, 3 };    
Push::unregisterLocalPushes(noticeIds);

API 参考: Push.unregisterLocalPushes

import com.hive.Push    
    val noticeIds = arrayListOf(1, 2, 3)    
Push.unregisterLocalPushes(noticeIds)

API 参考: com.hive .Push.unregisterLocalPushes

import com.hive.Push;    
    ArrayList<Integer> noticeIds = new ArrayList<>();    
    noticeIds.add(1);    
    noticeIds.add(2);    
    noticeIds.add(3);    
Push.INSTANCE.unregisterLocalPushes(noticeIds);

API 参考: PushInterface .unregisterLocalPushes

import HIVEService    
    let noticeIds = [1, 2, 3]    
PushInterface.unregisterLocalPushes(noticeids)

API 参考: HIVEPush:: unregisterLocalPushes

#import <HIVEService/HIVEService-Swift.h>    
    NSArray* noticeIds = @[ @(1), @(2), @(3) ];    
[HIVEPush unregisterLocalPushes: noticeIds];

注销所有本地推送

使用以下 API,您不仅可以注销 Hive SDK 的本地推送,还可以注销所有处于监听状态的本地推送。

API Reference: hive.Push .unregisterAllLocalPushes

using hive;    
Push.unregisterAllLocalPushes();
#include "HivePush.h"

FHivePush::UnregisterAllLocalPushes();

API 参考: Push:: unregisterAllLocalPushes

#include <HIVE_SDK_Plugin/HIVE_CPP.h>    
    using namespace std;    
    using namespace hive;    
Push::unregisterAllLocalPushes();

API 参考: Push.unregisterAllLocalPushes

import com.hive.Push    
Push.unregisterAllLocalPushes()

API 参考: com.hive .Push.unregisterAllLocalPushes

import com.hive.Push;    
Push.INSTANCE.unregisterAllLocalPushes();

API 参考: PushInterface.unregisterAllLocalPushes

import HIVEService    
PushInterface.unregisterAllLocalPushes()

API 参考: HIVEPush:: unregisterAllLocalPushes

#import <HIVEService/HIVEService-Swift.h>    
[HIVEPush unregisterAllLocalPushes];

自定义本地推送 UI (仅限 Android)

本地推送可以在Android设备上进行自定义。有关要自定义的UI元素的信息设置在registerLocalPush()方法的LocalPush类参数中,该方法注册本地推送以及推送设置信息。

本地推送 UI

本地推送 UI 的自定义数据在 LocalPush 类中定义,该类定义了本地推送设置的数据。下表描述了与 UI 项目相关的 LocalPush 类中的一些可更改字段。 某些字段名称链接到详细信息。点击字段名称以查看带有屏幕截图的更多详细信息。

名称 类型 描述 必需
type 字符串 推送消息的对话类型: "bar": 仅在通知栏显示通知(默认) "toast": 仅作为 toast 弹出 显示通知 "bar,toast": 同时在通知栏和作为 toast 弹出显示通知 可选
bigmsg 字符串 用户从屏幕顶部查看的内容。无限长度 注意:适用于 Android Jelly Bean (4.1) 及更高版本 可选
ticker 字符串 带有推送通知的跑马灯 可选
icon 字符串 /res/drawable 目录中的文件名,不包括文件扩展名。例如,如果文件路径是 res/drawable-xhdpi/hive_icon.png,则 icon 字段的值为 "hive\_icon"。没有文件名时,游戏图标显示为默认 可选
sound 字符串 推送通知的声音文件路径 没有文件路径时,使用默认通知声音 可选
active 字符串 用户点击推送通知时的操作设置: "app": 执行游戏(默认) "web:< 要移动的 URL>": 移动到该 URL 可选
broadcastAction 字符串 广播的操作值 可选
buckettype 整数 显示推送通知的类型:
* 0: 覆盖(默认)
* 1: 收件箱
* 2: 附加
可选
bucketsize 整数 一次显示与一个推送 ID 相关的消息数量 可选
bigpicture 字符串 显示在推送通知上的图像文件路径 可选
icon_color 字符串 图标的背景颜色
格式: {"r":[0–255],"g":[0–255],"b":[0–255]}
例如:{"r":0,"g":128,"b":255}
注意:适用于 Android Lollipop (5.0) 及更高版本
可选
Note

bigpicturemsg 字段中可用,但在 bigmsgticker 中不可用

type 字段

type 字段表示推送消息的对话形式。此形式定义了如何在屏幕上显示推送消息。 推送消息的对话形式有三个选项。

  • 条形类型:条形显示在屏幕顶部,包含 图标标题消息。当设备屏幕关闭时,不会显示通知。
  • 弹出类型:弹出以吐司格式显示
  • 条形和弹出类型:条形和弹出都显示在屏幕上

如果设备屏幕关闭并且类型设置为**条形和弹出类型**,则弹出窗口仅作为图像显示在上方。

bigmsgbigpicture 字段

请查看下面的图像,以检查显示在屏幕上的大消息和大图片。

  • 使用 bigmsg 字段来显示一大段文本。ticker 字段可与 bigmsg 一起使用。
  • 使用 bigpicture 字段,您可以在通知屏幕上显示大尺寸图片。
  • bigpicturebigmsg 不可用。
  • bigpicture 可与 ticker 一起使用。

buckettype 字段

如果显示多个通知并且buckettype字段的值为1或2,则堆叠的通知会显示在一个部分上。

  • bucketsize 指的是在通知栏上显示的消息数量。
  • 如果 buckettype 的值为 1,表示收件箱类型,如果消息超过一行,则会添加省略号 (...),并且超出屏幕的内容不会显示。
  • 如果 buckettype 的值为 2,则整个文本会显示在屏幕上。
  • buckettype 可以与 ticker 一起使用。
Note

如果您将目标设置为 21 以在 Google Play 商店中展示,请添加通知图标,以防止在 Android 5.0 或更高版本的设备上推送图标显示为白色。要做到这一点,请在 /res/drawable/ 文件夹中添加一个名为 ic_c2s_notification_small_icon.png 的图标文件。图标的 DPI 大小如下;

  • mdpi: 24x24
  • hdpi: 36x36
  • xhdpi: 48x48
  • xxhdpi: 72x72
  • xxxhdpi: 96x96

有关设计的更多信息,请参阅 Google Design Guide

发送 Facebook 云游戏 通知 (Android)

通过Hive SDK提供的本地推送功能,您可以使用来自Facebook Cloud Game构建的Facebook应用程序到用户通知

Note

Hive SDK v4 24.2.0开始,Facebook Cloud Game功能不再支持。对于使用Facebook Cloud Game的项目,请移除所有相关设置和函数调用。

 

对于 Facebook 通知,有一些限制,这些限制与 Android 的普通推送不同。请查看 Facebook 应用到 用户 通知 页面上的详细信息。

请注意,Facebook 通知功能正在不断更新,导致其行为不断变化。在 Facebook 通知功能变得稳定之前,Hive SDK 将持续更新。 (v4.16.1 已于 2022 年 10 月跟进并验证了 Facebook 应用程序到 用户 通知的更新。)

Facebook通知功能所需的数据必须在LocalPush类中定义。下表定义了LocalPush类的哪些字段是Facebook通知所必需的。

名称 类型 描述 必需
title 字符串 - 本地推送消息标题- 需要1~30个字符- 从Hive SDK 4.16.1开始,标题值是必需的,但尚未确认在Facebook UI中的使用位置. 必需
msg 字符串 - 本地推送消息内容- 需要10~180个字符- 在通知中作为消息显示 必需
after 整数 - 指示在推送注册后显示推送消息需要多少秒(以秒为单位,默认值=0)- 设置时间值(秒)最多为10天或更少 必需
bigpicture 字符串 - 需要图像设置- 300x200 px- 小于10MB- 如果图像作为网络链接发布,url应以http或https开头(例如: https://hive-fn.qpyou.cn/hubweb/hive_img/U/P/122349090/20151028/82f610b6f4590863934cefb2b875c87a.jpg)- 如果图像文件包含在项目资源中,图像文件应包含在/res/drawable下。如果文件名为fbcloudtest.png,则只需输入fbcloudtest作为值。 必需

当通知到达时,通知的内容将在Facebook网页和应用程序上显示,如下所示。

  • 在游戏页面的中心曝光
  • 在通知菜单中被找到,从游戏页面的左侧列表切换
  • 在Facebook应用上曝光
  •