跳到主要内容

Flutter Push 通知 SDK(版本 1.0.0)

以下是 push 通知的工作条件。

重要
  • 应用程序不同类型版本(debug、release 等)的签名和包名(package name)可能互不相同。 在这种情况下,您必须在 RuStore 控制台 的“推送通知 > 项目”部分为每种版本类型创建一个项目。
  • 正在使用最新版本的 SDK
  • 已在 RuStore 控制台 的“推送通知 > 项目”部分上传应用程序数据
  • 用户设备上已安装分发应用(如 RuStore 等)

    若要检查分发应用程序是否已安装在用户设备上,请使用 RuStorePushClient.checkPushAvailability 方法。
  • 如果安装了 RuStore 应用程序,则允许其在后台模式下运行。 如果没有此权限,推送通知仍会送达,但会有明显的延迟
  • 设备上安装的应用程序签名指纹与 RuStore 控制台 的“推送通知 > 项目”部分中添加的应用程序签名指纹一致

实现示例

请参阅 示例应用程序,以了解如何正确集成推送通知 SDK。

连接到项目

请执行以下命令将软件包连接到项目。

flutter pub add flutter_rustore_push

该命令将在 pubspec.yaml 文件中添加一行。

pubspec.yaml
dependencies:
flutter_rustore_push: ^1.0.0

初始化

初始化需要 来自 RuStore 控制台 的项目 ID。 要获取该 ID,请在应用程序页面中转到 推送通知 > 项目 部分,并复制 项目 ID 字段中的值

img
请注意

请注意,Push SDK 不支持在多个进程中同时运行
如果您的应用程序使用多个进程,则必须仅在主进程中初始化 SDK

如果在辅助进程中进行初始化,可能会导致 push 通知工作异常。

若要初始化推送通知服务,请在 Android 项目的 values 中添加一个值。

<resources>
<string name= "flutter_rustore_push_project" translatable= "false">xxx</string>
</resources>

xxx来自 RuStore 控制台 的项目 ID。 要获取该 ID,请在应用程序页面中转到 推送通知 > 项目 部分,并复制 项目 ID 字段中的值

若要启动推送通知服务,请添加一个继承自 FlutterRustoreApplicationApplication 类。 以下是使用 Kotlin 实现的示例。

package ru.rustore.flutter_rustore_push_example
import ru.rustore.flutter_rustore_push.FlutterRustoreApplication
open class Application: FlutterRustoreApplication() {
}

请在 AndroidManifest.xml 中指定该类。

AndroidManifest.xml
<application
android:label= "flutter_rustore_push_example"
android:name= ".Application"
android:icon= "@mipmap/ic_launcher">
// ...
</application>

ProGuard 设置

若要配置 ProGuard,请添加以下规则。

-keep public class com.vk.push.** extends android.os.Parcelable

android/app/build.gradle 文件中添加以下行。

android/app/build.gradle
buildTypes {
release {
// ...
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

检查接收推送通知的能力

若要检查分发应用程序是否已安装在用户设备上,请使用 RustorePushClient.available() 方法。
RustorePushClient.available().then((value) {
print("available success: ${value}");
}, onError: (err) {
print("available error: ${err}");
}
);

Push 令牌操作方法

获取用户的 Push 令牌

警告

如果用户没有 push 令牌,该方法将创建并返回一个新的 push 令牌。

在初始化库之后,您可以使用 RuStorePushClient.getToken() 方法来获取当前用户的 push 令牌。
RustorePushClient.getToken().then((value) {
print("get token success: ${value}" );
}, onError: (err) {
print("get token error: ${err}" );
}
);

删除用户的 Push 令牌

在初始化库之后,您可以使用 RuStorePushClient.deleteToken() 方法来删除当前用户的 push 令牌。
RustorePushClient.deleteToken().then(() {
print( "delete success:" );
}, onError: (err) {
print( "delete error: ${err}" );
}
);

push 令牌变更事件

有时旧令牌会失效,可能会重新颁发。 要获知新令牌(token)已签发,请使用回调 onNewToken

onNewToken((value) {
print("on new token success: ${value}");
}

用于操作 push 通知的方法

获取推送通知信息

要获取 push 通知中的信息,请添加回调 onMessageReceived
onMessageReceived((value) {
print("on message received success: id=${value.messageId}, data=${value.data}, notification.body: ${value.notification?.body}");
}

若要获取用于打开应用程序的通知,请添加 getInitialMessage 回调

RustorePushClient.getInitialMessage().then((value) {
print("getInitialMessage from dart called: ${value?.notification?.title}");
},

删除 push 通知

要获取有关删除 push 通知的信息,请添加 onDeletedMessages 回调。

onDeletedMessages: () {
print("on delete messages");
}

通知结构

完整通知的结构
class Message {
String? messageId;
int priority;
int ttl;
String? collapseKey;
Map<String?, String?> data;
Notification? notification;
}
  • messageId — 消息的唯一 ID。 它是每条消息的标识符
  • priority — 返回优先级值(目前不考虑)。 目前定义了以下选项:
    • 0UNKNOWN
    • 1HIGH
    • 2NORMAL
  • ttlInt 类型的 push 通知生存时间,单位为秒
  • from — 用于识别通知来源的字段:
    • 对于发送到主题(topic)的通知,该字段显示主题名称;
    • 在其他情况下,显示服务令牌的一部分。
  • collapseKey — 通知组的标识符(目前不考虑)
  • data — 一个字典,其中可以传递通知的附加数据
  • rawData — 以字节数组形式表示的 data 字典
  • notification — 通知对象
Notification 对象的结构
class Notification {
String? title;
String? body;
String? channelId;
String? imageUrl;
String? color;
String? icon;
String? clickAction;
}
  • title — 通知标题
  • body — 通知正文
  • channelId — 用于指定发送通知的渠道。 适用于 Android 8.0 及更高版本
  • imageUrl — 用于插入通知的图像直接链接。 图像大小不得超过 1 MB
  • color — 以字符串形式表示的 HEX 格式通知颜色。 例如,#0077FF
  • icon — 来自 res/drawable 的通知图标,以与资源名称一致的字符串格式表示。
    例如,res/drawable 中有一个 small_icon.xml 图标,可以通过 R.drawable.small_icon 在代码中访问。
    为了让图标在通知中显示,服务器必须在 icon 参数中指定 small_icon 的值
  • clickAction — 点击通知时用于打开 Activity 的 intent action

创建用于发送通知的渠道

发送通知的渠道遵循以下优先级。

  • 如果推送通知中包含 channelId 字段,RuStore SDK 将把通知发送到指定的渠道。 您的应用程序必须提前创建此渠道。

  • 如果推送通知中没有 channelId 字段,但您的应用程序在 AndroidManifest.xml 中指定了渠道参数,则将使用该指定渠道。 您的应用程序必须提前创建此渠道。

  • 如果 push 通知中没有 channelId 字段,且 AndroidManifest.xml 中未指定默认通道,RuStore SDK 将创建该通道并将通知发送至其中。 此后,所有未明确指定通道的通知都将发送到该通道。

另请参阅