Ios Swift-如何从OneSignal SDK向特定用户名标记发送post通知?

Ios Swift-如何从OneSignal SDK向特定用户名标记发送post通知?,ios,swift,push-notification,onesignal,Ios,Swift,Push Notification,Onesignal,如何从Swift/iOS本机SDK向特定标记(用户名:“@john”)发送post通知。我以前发过一个信号。我正在下面发送一个带有playerID的用户。但这还不够。有人可以使用不同的帐户登录。所以他们所有人都会有同样的球员ID。当我添加标记行时,它并不像我期望的那样工作。如何将播放器ID和用户名标记一起使用 OneSignal.sendTag("username", value: "\(username)") 如果有人解释一下,那就太好了 DataService.ds.REF_USERS.c

如何从Swift/iOS本机SDK向特定标记(用户名:“@john”)发送post通知。我以前发过一个信号。我正在下面发送一个带有playerID的用户。但这还不够。有人可以使用不同的帐户登录。所以他们所有人都会有同样的球员ID。当我添加标记行时,它并不像我期望的那样工作。如何将播放器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\u player\u id
字段锁定设备

请注意,OneSignal也不允许您组合不同的目标参数。因此,您不能同时使用
包含玩家ID
标记

OneSignal.sendTag("username", value: "\(username)")
要基于用户名发送通知,请使用
OneSignal.sendTag
方法分配用户名,如示例所示。接下来,从服务器端代码中,使用
过滤器
目标参数向所有使用该用户名的用户发送通知

例如,下面是一个如何在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文档中找到其他示例。

谢谢您的详细回答。我没有使用服务器端,而是使用临时解决方案,在用户注销时从数据库中删除playerID。这个答案将来也会很方便。但是如果我不使用服务器端代码呢?我需要通过移动SDK定位一个标签