我正在开发一个应用程序,并试图找出当其他用户执行特定操作时如何通知特定用户。我试图避免设置我自己的后端服务器,因为我相信我想做的事情可以由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,所以如果有人能指出我朝那个方向发展,那将是值得赞赏的。
通过阅读其他问题,似乎这会起作用。我只是想看看这种方法是否有任何潜在的问题,或者是否有更安全或更简单的方法。
答案 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]])
}
}
})
这不是完整的实现以及如何实现,但它会给你正确的思考方式。