原语| Firebase通知不起作用

时间:2018-08-29 13:00:07

标签: ios node.js firebase firebase-cloud-messaging nativescript

当我使用android时,在我的Nativescript应用程序中使用firebase时遇到问题,但不能与IOS一起使用。问题出在消息发送上。 我在客户端使用推插件

这是使用pushPlugin在IOS客户端中的注册部分

const iosSettings:any = {
        badge: true,
        sound: true,
        alert: true,
        interactiveSettings: {
            actions: [{
                identifier: 'READ_IDENTIFIER',
                title: 'Read',
                activationMode: "foreground",
                destructive: false,
                authenticationRequired: true
            }, {
                identifier: 'CANCEL_IDENTIFIER',
                title: 'Cancel',
                activationMode: "foreground",
                destructive: true,
                authenticationRequired: true
            }],
            categories: [{
                identifier: 'READ_CATEGORY',
                actionsForDefaultContext: ['READ_IDENTIFIER', 'CANCEL_IDENTIFIER'],
                actionsForMinimalContext: ['READ_IDENTIFIER', 'CANCEL_IDENTIFIER']
            }]
        },
        notificationCallbackIOS: (message: any) => {
            alert(JSON.stringify(message));
        }
    };


    pushPlugin.register(iosSettings, (token: string) => {
        // update the token in the server
        alert("Device registered. Access token: " + token);
            });
        }
    }, (errorMessage: any) => {
        alert("Device NOT registered! " + JSON.stringify(errorMessage));
    });

这是我收到推送通知令牌的方式, 当我使用Pusher应用程序获得令牌后,一切正常,我在IOS设备中收到通知 但是问题是当我试图从服务器发送通知时!。

我收到此错误:

  

提供了无效的注册令牌。确保它与   客户端应用从FCM注册中获得的注册令牌。

服务器中的节点代码

        var payload = {
        data: {
          targetId:userToken,
          body: "some text"
        }
      };
    var options = {
        priority: "high",
        contentAvailable: true,
        timeToLive: 60 * 60 * 24
      };
    Admin.messaging().sendToDevice(userToken, <any>payload,options)
        .then((response) => {
            console.log('notification arrived successfully', response.results[0]);
        })
        .catch((error) => {
            console.log('notification failed', error);
        });

1 个答案:

答案 0 :(得分:1)

ios的

注册令牌与android不同。我遇到了你遇到的同一堵墙。您需要将https://github.com/node-apn/node-apn用于IOS推送通知。和firebase用于Android通知。您可以通过保存令牌在后端执行逻辑。带有一个名为type的字段,如果ios使用的是ios or android,而android使用的是Firebase提供的node-apn,则为sendToDevice

这就是我当前正在使用的本机脚本项目正在使用的内容,其中涉及推送通知。希望对您有帮助,伴侣。