ios - Swift - 如何将帖子通知从 OneSignal SDK 发送到特定的用户名标签?

标签 ios swift push-notification onesignal

如何从 Swift/iOS Native SDK 向特定标签(用户名:“@john”)发送帖子通知。我之前有 sendTag OneSignal。我在下面发送一个带有 playerID 的用户。但这还不够。某人可以使用不同的帐户登录。所以相同的 playerID 将适用于所有人。当我添加标语行时,它并没有像我预期的那样工作。如何一起使用玩家 ID 和用户名标签。

OneSignal.sendTag("username", value: "\(username)")

如果有人解释一下,那就太好了。

DataService.ds.REF_USERS.child(userUUID).child("playerID").observeSingleEvent(of: .value, with: { snapshot in

if let playerID = snapshot.value as? String {

    OneSignal.idsAvailable({ (userId, pushToken) in
        print("UserId:%@", userId ?? "")

        self.showErrorAlert("Player ID Here:", msg: "\(userId!)")

        if (pushToken != nil) {

            OneSignal.postNotification(["contents": ["en": "@username wrote a comment: \(trimmed)"],
                                        "include_player_ids": [playerID],
                                        "send_after": "2017-01-10 20:10:00 GMT+0300",
                                        "tag": ["field": "tag", "key": "username", "relation": "=", "value": "john",
                ])
        }

    })

} 
})

最佳答案

出于安全原因,OneSignal 不允许您在应用代码中使用标签定位。

不过,OneSignal 确实允许您使用应用内的 include_player_ids 字段来定位设备。

请注意,OneSignal 也不允许您组合不同的定位参数。因此,您不能同时使用 include_player_idstags 定位。

要根据用户名发送通知,请使用 OneSignal.sendTag 方法来分配用户名,就像您的示例中一样。接下来,在您的服务器端代码中,使用 filters 定位参数向具有该用户名的所有用户发送通知。

例如,这是一个如何在 Ruby 中执行此操作的示例:

params = {"app_id" => "5eb5a37e-b458-11e3-ac11-000c2940e62c", 
          "contents" => {"en" => "English Message"},
          "filters" => [
                        {"field": "tag", 
                         "key": "username", 
                         "relation": "=", 
                         "value": "(username)"}
                       ]
        }
uri = URI.parse('https://onesignal.com/api/v1/notifications')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri.path,
                              'Content-Type'  => 'application/json;charset=utf-8',
                              'Authorization' => "Basic NGEwMGZmMjItY2NkNy0xMWUzLTk5ZDUtMDAwYzI5NDBlNjJj")
request.body = params.as_json.to_json
response = http.request(request) 
puts response.body

您可以在 OneSignal 文档中找到其他示例 here .

关于ios - Swift - 如何将帖子通知从 OneSignal SDK 发送到特定的用户名标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41566879/

相关文章:

ios - AVPlayer 导致 TableView 滞后

ios - 从iOS应用程序检测iCloud的不可访问性

iphone - 通过套接字发送图像数据,但它在到达服务器时接收到一些不同的格式

ios - 在 react-native 中构建 google-signin 包失败?

ios - 在 UITabBarController 中的不同选项卡之间共享公共(public) View

iphone - 如何告诉用户最近收到的推送通知

ios - 应用程序委托(delegate)检查所有 View Controller 转换何时完成

ios - 我们可以以及如何使用 Urbanairship for iOS app Enterprise Distribution?

ios - 如何通过Ruby(或Xcodeproj)获取目标版本

ios - 在 Swift 5 中更改 Lottie AnimationView 大小