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

@nativescript-asharghi/firebase-messaging-core

ns plugin add @nativescript-asharghi/firebase-messaging-core

它有什么功能?

Firebase Messaging Core是一个轻量级的包,它使您能够在Android和iOS上使用第三方推送服务。

在Android上,它始终使用FCM。

用法

iOS - 请求权限

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

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

import { MessagingCore, AuthorizationStatus } from '@nativescript-asharghi/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-asharghi/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-asharghi/firebase-messaging-core';
MessagingCore.getInstance().showNotificationsWhenInForeground = true;

设备令牌

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

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

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

保存令牌

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

import { ApplicationSettings } from '@nativescript/core';
import { MessagingCore } from '@nativescript-asharghi/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/YourAppName/(Resources/)YourAppName.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 版