首页 > 解决方案 > Swift OneSignal 重复 PlayerId 和 PushToken

问题描述

我将 Onesignal 与 Firebase 一起使用,但我的问题是为所有用户生成了相同的 PlayerID 和 PushToken。下面的图片显示了 UserID 和 PushTokens 的打印输出。我从我的设备中删除了我的应用程序并重新安装了它。第一个打印输出来自 AppDelegate,我在其中得到“您想允许通知吗?”,然后第二个打印输出是我的“客户”正在创建配置文件的地方。第三个打印输出是在“客户”创建配置文件之后,但第三个用户 ID 和推送令牌不同,但不要这样保存。我究竟做错了什么?第二个打印输出是我为所有用户得到的。

应用委托

let notificationReceivedBlock: OSHandleNotificationReceivedBlock = { notification in

        print("Received Notification: \(notification!.payload.notificationID)")
    }

    //OneSignal.add(self as! OSSubscriptionObserver)

    let notificationOpenedBlock: OSHandleNotificationActionBlock = { result in
        // This block gets called when the user reacts to a notification received
        let payload: OSNotificationPayload = result!.notification.payload

        var fullMessage = payload.body
        print("Message = \(fullMessage)")

        if payload.additionalData != nil {
            if payload.title != nil {
                let messageTitle = payload.title
                print("Message Title = \(messageTitle!)")
            }

            let additionalData = payload.additionalData
            if additionalData?["actionSelected"] != nil {
                fullMessage = fullMessage! + "\nPressed ButtonID: \(additionalData!["actionSelected"])"
            }
        }
    }

    let onesignalInitSettings = [kOSSettingsKeyAutoPrompt: false,
                                 kOSSettingsKeyInAppLaunchURL: true]

    OneSignal.initWithLaunchOptions(launchOptions,
                                    appId: "\(appID)",
                                    handleNotificationReceived: notificationReceivedBlock,
                                    handleNotificationAction: notificationOpenedBlock,
                                    settings: onesignalInitSettings)

    OneSignal.inFocusDisplayType = OSNotificationDisplayType.notification

    let status: OSPermissionSubscriptionState = OneSignal.getPermissionSubscriptionState()
    OneSignal.setSubscription(true)
    let uid = Auth.auth().currentUser?.uid
    print("##############################")
    let userID = status.subscriptionStatus.userId
    print("userID = \(userID)")
    let pushToken = status.subscriptionStatus.pushToken
    print("pushToken = \(pushToken)")

    if pushToken != nil {
        if let playerID = userID {

        }
    }

在此处输入图像描述

标签: iosswiftonesignal

解决方案


推荐阅读