Swift - 如何从 OneSignal SDK 向特定用户名标签发送 post 通知?
Swift - How sending a post notification from OneSignal SDK to specific username tag?
如何从 Swift/iOS Native SDK 发送 post 通知到特定标签,例如(用户名:“@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_ids
和 tags
定位。
要根据用户名发送通知,请使用 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。
如何从 Swift/iOS Native SDK 发送 post 通知到特定标签,例如(用户名:“@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_ids
和 tags
定位。
要根据用户名发送通知,请使用 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。