世博会推送通知发送到多个设备,而不是一个

时间:2020-08-16 01:04:19

标签: php push-notification expo push react-native-push-notification

我正在使用EXPO托管工作流开发移动应用程序。我的应用程序具有后端的PHP REST API。 在处理应用程序的推送通知部分时,我遇到了一个奇怪的问题。

我正在使用2种不同的设备(iPhone和Android手机)进行测试。两种设备都使用不同的用户帐户登录应用程序,并且两种设备都在数据库中设置了不同的博览会推送通知令牌。

当管理员希望向特定用户发送新报价时,两个设备都会收到推送通知,而不是仅管理员希望向其发送消息的用户所属的设备。

这是我从后端发送通知的方式。该代码仅执行一次,所以我想我在这里做错了。

$this->expo = Expo::normalSetup();
$interest = 'new_offer';

// Subscribe the recipient to the server
$this->expo->subscribe($interest, $recipient);

// Build the notification data
$notification = [
   'title' => $this->title,
   'body' => $body,
   'data' => json_encode([
      'type' => $this->type,
      'inquiryId' => $this->inquiry->getId(),
      'offerId' => $this->offer->getId(),
      ]),
   ];

// Notify an interest with a notification
$this->expo->notify($interest, $notification);

这就是我在应用程序中的处理方式

    /**
     * Get Expo push token and connect it with the user
     * @see https://docs.expo.io/versions/latest/guides/push-notifications/
     * @returns {Promise<void>}
     */
    registerForPushNotificationsAsync = async () => {
        const {status: existingStatus} = await Permissions.getAsync(Permissions.NOTIFICATIONS);
        let finalStatus = existingStatus;

        // only ask if permissions have not already been determined, because
        // iOS won't necessarily prompt the user a second time.
        if (existingStatus !== 'granted') {
            // Android remote notification permissions are granted during the app
            // install, so this will only ask on iOS
            const {status} = await Permissions.askAsync(Permissions.NOTIFICATIONS);
            finalStatus = status;
        }

        // Stop here if the user did not grant permissions
        if (finalStatus !== 'granted') {
            return;
        }

        // Get the token that uniquely identifies this device
        const token = await Notifications.getExpoPushTokenAsync();

        /**
         * @token ExponentPushToken[cszdf-SKFcXkd-8e6BEtjNG]
         */

        this.pushNotificationsToken = token;
        this._notificationSubscription = Notifications.addListener(this._handleNotification);
    }

    _handleNotification = ({origin, data}) => {
        console.warn(origin, data);

        switch (data.type) {
            case PushNotificationTypes.PARTNER_SUBMITTED_NEW_OFFER: {
                return this.props.navigation.navigate('InquiryOffers', {getInquiryId: data.inquiryId});
            }
        }
    }

有什么主意我在做错什么以及如何解决?

谢谢

鲍勃

0 个答案:

没有答案