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

Sending push notifications from iOS device using OneSignal/Firebase

我正在开发一个应用程序,并且正在尝试弄清楚如何在不同用户执行特定操作时通知特定用户。我试图避免设置自己的后端服务器,因为我相信我想做的事情可以通过 OneSignal/Firebase.

来完成

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

虽然在浏览完文档后我不确定用户如何找到(以便他们可以上传到 firebase)他们的player_id,所以如果有人能指出我的方向,我将不胜感激.

看了其他问题,好像这样行。我只是想看看这种方法是否有任何类似的潜在问题,或者是否有更安全或更简单的方法来解决它。

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

  • 为 API-Keys

  • 创建一个 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])
    
  • 将推送 token/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]])
            }
        }
    })
    

这不是完整的实现方式和操作方法,但它会为您提供我认为的正确方法。