如何解决我们如何使用 React Native 为 Azure 通知中心注册推送通知侦听器?
我在 Azure 通知中心创建了一个实例,并向从 Firebase 控制台获取的 GCM 选项添加了一个服务器密钥。我有一个 Node.js 后端,它有 REST API 端点来注册安装并使用 azure-sb 包向注册的设备发送推送通知。在我的客户端 RN 代码中,我遵循了 Microsoft 文档 https://docs.microsoft.com/en-us/azure/developer/mobile-apps/notification-hubs-backend-service-react-native 中概述的步骤,并针对我的代码库对其进行了修改。我能够注册安装,但我无法接收从后端或 Azure 通知中心门户中的测试发送选项发送的任何推送通知。它显示我没有错误,除了它随机声明“用于注册的推送通知系统句柄无效”时,只要推送通道过期。是否有任何工作示例可以在 RN 中注册推送通知侦听器?该文档似乎也已过时,如果查看使用 Hooks API 的工作示例会很有帮助。这是我修改并添加到应用程序主屏幕的代码。在屏幕上按下按钮时会调用注册和取消注册功能。其他 NotificationService 和 Handlers 已添加,如文档中所述。
let deviceId = DeviceInfo.getUniqueId();
const [deviceState,setDeviceState] = useState({
status: "Push notifications registration status is unknown",registeredOS: "",registeredToken: "",isRegistered: false,isBusy: false,});
let notificationService = new DemoNotificationService(
onTokenReceived,onNotificationReceived,);
let notificationRegistrationService = new DemoNotificationRegistrationService(
'http://xxxxxx/api','',);
function onTokenReceived(token: any) {
console.log(`Received a notification token on ${token.os}`);
setDeviceState({ ...deviceState,registeredToken: token.token,registeredOS: token.os,status: `The push notifications token has been received.` });
if (deviceState.isRegistered && deviceState.registeredToken && deviceState.registeredOS) {
onRegisterButtonPress();
}
}
function onNotificationReceived(notification: any) {
console.log(`Received a push notification on ${deviceState.registeredOS}`);
setDeviceState({...deviceState,status: `Received a push notification...` });
if (notification.data.message) {
console.log(`${notification.data.action} action received`);
}
}
async function onRegisterButtonPress() {
// if (!deviceState.registeredToken || !deviceState.registeredOS) {
// console.log("The push notifications token wasn't received.");
// return;
// }
let status: string = "Registering...";
let isRegistered = deviceState.isRegistered;
try {
setDeviceState({ ...deviceState,isBusy: true,status });
const pnPlatform = deviceState.registeredOS == "ios" ? "gcm" : "gcm";
const pnToken = deviceState.registeredToken;
const request = {
installationId: deviceId,platform: pnPlatform,pushChannel: pnToken,tags: []
};
const response = await notificationRegistrationService.registerAsync(request);
status = `Registered for ${deviceState.registeredOS} push notifications`;
isRegistered = true;
} catch (e) {
status = `Registration failed: ${e}`;
}
finally {
setDeviceState({ ...deviceState,status,isRegistered });
}
}
async function onDeregisterButtonPress() {
if (!notificationService)
return;
let status: string = "Deregistering...";
let isRegistered = deviceState.isRegistered;
try {
setDeviceState({ ...deviceState,status });
await notificationRegistrationService.deregisterAsync(deviceId);
status = "Deregistered from push notifications";
isRegistered = false;
} catch (e) {
status = `Deregistration failed: ${e}`;
}
finally {
setDeviceState({ ...deviceState,isRegistered });
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。