@nativescript/firebase-messaging-core
NativeScript 推送消息核心
npm i --save @nativescript/firebase-messaging-core

@nativescript/firebase-messaging-core

ns plugin add @nativescript/firebase-messaging-core

它有什么作用?

Firebase 消息核心是一个轻量级包,它允许您在 Android 和 iOS 上使用第三方推送服务。

在 Android 上,它将始终使用 FCM。

使用方法

iOS - 请求权限

iOS 会阻止显示包含通知(或“警报”)有效负载的消息,除非您已从用户那里获得明确的许可。

此模块提供了一个 requestPermission 方法,它将触发一个本地权限对话框请求用户的许可

import { MessagingCore, AuthorizationStatus } from '@nativescript/firebase-messaging-core';

async function requestUserPermission() {
const authStatus = await MessagingCore.getInstance().requestPermission({
ios: {
alert: true,
},
});
const enabled = authStatus === AuthorizationStatus.AUTHORIZED || authStatus === AuthorizationStatus.PROVISIONAL;

if (enabled) {
console.log('Authorization status:', authStatus);

const didRegister = await MessagingCore.getInstance().registerDeviceForRemoteMessages();
}
}

iOS 的权限 API 提供了更多细粒度的控制权限以及如何在您的应用程序中处理权限。要了解更多信息,请查看高级 iOS 权限文档。

在 Android 上,您不需要请求用户许可。此方法仍可以在 Android 设备上调用;然而,它将始终成功解决。

前台状态消息

要监听前台消息,请调用应用程序代码中的 onMessage 方法。通过此处理程序执行的操作能够与您的应用程序交互(例如更新状态或 UI)。

例如,可以使用 Alert API 在每次交付消息时显示新的 Alert。

import { alert } from '@nativescript/core';
import { MessagingCore } from '@nativescript/firebase-messaging-core';

MessagingCore.getInstance().addOnMessage(async (remoteMessage) => {
if(MessagingCore.inForeground){
alert('A new Push message arrived with application inForeground!', JSON.stringify(remoteMessage));
}else{
alert('A new Push message arrived with application in background!', JSON.stringify(remoteMessage));
}
});

当应用程序在前台时始终显示通知

如果您始终希望在应用程序在前台时显示通知,而无需在发送推送通知时发送额外的参数/数据,则需要将 showNotificationsWhenInForeground 选项设置为 true

import { MessagingCore } from '@nativescript/firebase-messaging-core';
MessagingCore.getInstance().showNotificationsWhenInForeground = true;

设备令牌

要向设备发送消息,您必须访问其唯一的令牌。令牌由设备自动生成,可以使用 Messaging 模块访问。令牌应在您的系统数据存储中保存,并且当需要时易于访问。

以下示例使用 NativeScript ApplicationSettings 来存储和管理令牌。但是,您可以使用任何数据存储。

注意:如果使用 iOS,在尝试接收消息之前,请确保您已完成了设置请求用户许可

保存令牌

一旦您的应用程序开始运行,您就可以在 Cloud Messaging 模块上调用 getToken 方法以获取唯一的设备令牌(如果您使用的是不同的推送通知提供商,例如 Amazon SNS,则需要在 iOS 上调用 getAPNSToken)

import { ApplicationSettings } from '@nativescript/core';
import { MessagingCore } from '@nativescript/firebase-messaging-core';

async function saveTokenToDatabase(token) {
ApplicationSettings.setString(token);
}

// Get the device token
MessagingCore.getInstance()
.getCurrentToken()
.then((token) => {
saveTokenToDatabase(token);
});

// Listen to whether the token changes
MessagingCore.getInstance().addOnToken((token) => {
saveTokenToDatabase(token);
});

Android 集成

推送通知图标和颜色

如果您想为推送通知使用特定的图标,则必须在 AndroidManifest.xml 的标签中配置它

<meta-data android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/your_drawable_name" />

<meta-data android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/ns_primary" />

Apple 集成

在 Xcode 中启用推送支持

打开 /platforms/ios/yourproject.xcworkspace (!) 并转到您项目的目标,然后在“功能”中切换此选项(如果尚未启用):push-xcode-config

注意:如果不启用此选项,您将收到前台推送消息,但不会在后台或当应用程序被杀死时收到。

复制权限文件

上一步创建了一个文件 platforms/ios/您的应用名称/(Resources/)您的应用名称.entitlements。将该文件移动并重命名为 app/App_Resources/iOS/app.entitlements(如果尚不存在,则合并其内容),这样在您移除并重新添加iOS平台时,该文件不会被删除。该文件中关于后台推送的相关内容是

<key>aps-environment</key>
<string>development</string>

允许在接收到后台推送时进行处理

打开 app/App_Resources/iOS/Info.plist 并在底部添加以下内容

<key>UIBackgroundModes</key>
<array>
<string>remote-notification</string>
</array>

许可证

Apache许可证版本2.0