使用OneSignal / Firebase从iOS设备发送推送通知

时间:2017-05-29 15:42:02

标签: swift firebase push-notification firebase-realtime-database onesignal

我正在开发一个应用程序,并试图找出当其他用户执行特定操作时如何通知特定用户。我试图避免设置我自己的后端服务器,因为我相信我想做的事情可以由OneSignal / Firebase完成。

我还没有尝试过,但我想每个用户我都可以获得自己的OneSignal player_id(基本上是OneSignal device_id),将其上传到我的firebase数据库,然后当我想发送推送通知时只需从firebase中提取用户的player_id,然后使用它来创建OneSignals send to specific device的通知,其中使用player_ids不需要API Auth Key。

虽然在查看文档之后我不确定用户如何找到(因此他们可以上传到firebase)他们的player_id,所以如果有人能指出我朝那个方向发展,那将是值得赞赏的。

通过阅读其他问题,似乎这会起作用。我只是想看看这种方法是否有任何潜在的问题,或者是否有更安全或更简单的方法。

1 个答案:

答案 0 :(得分:10)

是的,这是可能的,你需要做的是:

  • 为API密钥创建OneSignal和Firebase帐户

  • 添加一个信号(仅作为示例)

    OneSignal.initWithLaunchOptions(launchOptions, appId: "your app id", handleNotificationReceived: { (notification) in
    
        }, handleNotificationAction: { (result) in
            let payload: OSNotificationPayload? = result?.notification.payload
            print(payload ?? "")
    
        }, settings: [kOSSettingsKeyAutoPrompt : false, kOSSettingsKeyInFocusDisplayOption: OSNotificationDisplayType.notification.rawValue])
    
  • 将推送令牌/ playerId保存到firebase(例如在users.id.onesignal中)

    OneSignal.promptForPushNotifications(userResponse: nil)
    OneSignal.idsAvailable({(_ userId, _ pushToken) in
    print("UserId:\(userId!)")
    if let pushToken = pushToken {
        print("pushToken:\(pushToken)")
        FIRDatabase.database().reference().child("users").child(User.sharedInstance.uid).child("onesignal").setValue([userId!: pushToken])
    
    }
    })
    
  • 当你为每个用户提供pushToken时,你可以向该playerId发送通知

    FIRDatabase.database().reference().child("users").child(friendId).child("onesignal").observeSingleEvent(of: .value, with: {snapshot in
        if snapshot.exists() {
    
            for (playerId, _) in snapshot.value as! Dictionary<String, String> {
    
                OneSignal.postNotification(["headings": ["en": title], "contents": ["en": message], "include_player_ids": [playerId]])
            }
        }
    })
    

这不是完整的实现以及如何实现,但它会给你正确的思考方式。