2017-01-10 6 views
3

どのようにSwift/iOS Native SDKから(username: "@john")のような特定のタグに投稿通知を送信できますか?私は前にsendTag OneSignalを持っています。私はplayerIDを持つユーザーの下に送信しています。しかしそれでは十分ではありません。誰かが別のアカウントでログインできます。だから、同じplayerIDがそれらすべてのためになります。タグラインを追加すると、期待通りに動作しません。作業の仕方プレーヤーID & & username tag together。Swift - OneSignal SDKから特定のユーザー名タグに通知を送信する方法

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", 
       ]) 
     } 

    }) 

} 
}) 

答えて

1

セキュリティ上の理由から、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に追加の例を見つけることができます。

+0

詳細な回答ありがとうございます。サーバー側ではなく、データベースからplayerIDを削除して一時的に解決しました。ユーザーがログアウトした場合。また、この回答は今後も役立ちます。 – tobeiosdev

+1

しかし、サーバー側のコードを使用していない場合はどうすればよいですか?モバイルSDK経由でタグをターゲットに設定する必要があります – vikzilla

関連する問題