Class: Gs2::Inbox::Client
- Inherits:
-
Core::AbstractClient
- Object
- Core::AbstractClient
- Gs2::Inbox::Client
- Defined in:
- lib/gs2/inbox/Client.rb
Overview
GS2-Inbox クライアント
Constant Summary collapse
- @@ENDPOINT =
'inbox'
Class Method Summary collapse
-
.ENDPOINT(v = nil) ⇒ Object
デバッグ用。通常利用する必要はありません。.
Instance Method Summary collapse
-
#create_inbox(request) ⇒ Array
受信ボックスを作成
GS2-Inbox を利用するにはまず受信ボックスを作成します。
受信ボックスを作成後、受信ボックスにメッセージを送信することでメッセージを届けることができます。
1つの受信ボックスで、複数のユーザのメッセージを扱うことができますので、ユーザ数分の受信ボックスを作成する必要はありません。
. -
#delete_inbox(request) ⇒ Object
受信ボックスを削除.
-
#delete_message(request) ⇒ Object
メッセージを削除
accessToken には Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
. -
#delete_messages(request) ⇒ Object
メッセージを複数同時に削除する。
accessToken には Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
. -
#describe_inbox(pageToken = nil, limit = nil) ⇒ Array
受信ボックスリストを取得.
-
#describe_message(request, pageToken = nil, limit = nil) ⇒ Array
メッセージリストを取得
accessToken には Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
. -
#describe_service_class ⇒ Array
サービスクラスリストを取得.
-
#get_inbox(request) ⇒ Array
受信ボックスを取得.
-
#get_inbox_status(request) ⇒ Array
受信ボックスのステータスを取得.
-
#get_message(request) ⇒ Array
メッセージを取得.
-
#initialize(region, gs2_client_id, gs2_client_secret) ⇒ Client
constructor
コンストラクタ.
-
#read_message(request) ⇒ Array
メッセージを開封
受信ボックスの設定で開封時自動削除設定が有効な場合は、メッセージは削除されます。
連携用URLを呼び出す設定になっている場合、連携用URLにメッセージIDを付与したコールバックが実行されます。
このコールバックをうけて、持ち物を増やしたりすることでメッセージにアイテムを添付することができます。
レスポンスには連携用URLを呼び出した際の応答内容も含まれますので、開封時にさらにメッセージを表示させるようなこともできます。
例えば、連携用URLを呼び出した際に「アイテムを手に入れた」というレスポンスを返すことで、このAPIのレスポンスにその文字列も含んだ形で応答されますので、
開封時にさらにその応答メッセージを使って画面にメッセージとして「アイテムを手に入れた」という表示をすることができます。
開封時のコールバックは通信障害などの理由により、コールバック先のサーバは正しく処理を行えたけれど、
GS2側のインフラにレスポンスが届かず、結果的に処理が失敗する可能性を考慮する必要があります。
この場合、複数回の開封コールバックが呼び出される可能性がありますので、コールバック処理は冪等性を持った形で実装するようにしてください。
accessToken には Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
. -
#read_messages(request) ⇒ Array
メッセージを複数同時に既読にする。
受信ボックスの設定で開封時自動削除設定が有効な場合は、メッセージは削除されます。
連携用URLを呼び出す設定になっている場合、連携用URLにメッセージIDを付与したコールバックが実行されます。
このコールバックをうけて、持ち物を増やしたりすることでメッセージにアイテムを添付することができます。
レスポンスには連携用URLを呼び出した際の応答内容も含まれますので、開封時にさらにメッセージを表示させるようなこともできます。
例えば、連携用URLを呼び出した際に「アイテムを手に入れた」というレスポンスを返すことで、このAPIのレスポンスにその文字列も含んだ形で応答されますので、
開封時にさらにその応答メッセージを使って画面にメッセージとして「アイテムを手に入れた」という表示をすることができます。
開封時のコールバックは通信障害などの理由により、コールバック先のサーバは正しく処理を行えたけれど、
GS2側のインフラにレスポンスが届かず、結果的に処理が失敗する可能性を考慮する必要があります。
この場合、複数回の開封コールバックが呼び出される可能性がありますので、コールバック処理は冪等性を持った形で実装するようにしてください。
accessToken には Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
. -
#send_message(request) ⇒ Array
メッセージを送信
メッセージを受信ボックスに送信します。
メッセージには本文との他に開封時通知を有効にするかのフラグ、既読状態のフラグといった情報が付加されています。
開封時通知を有効にすると、受信ボックスに設定された連携用URLにメッセージIDがPOSTリクエストで通知されます。
メッセージ送信時にも送信したメッセージIDが取得できますので、
例えば、メッセージに課金用アイテムを添付したい場合は以下の様なメッセージを送信します。
. -
#update_inbox(request) ⇒ Array
受信ボックスを更新.
Constructor Details
#initialize(region, gs2_client_id, gs2_client_secret) ⇒ Client
コンストラクタ
17 18 19 |
# File 'lib/gs2/inbox/Client.rb', line 17 def initialize(region, gs2_client_id, gs2_client_secret) super(region, gs2_client_id, gs2_client_secret) end |
Class Method Details
.ENDPOINT(v = nil) ⇒ Object
デバッグ用。通常利用する必要はありません。
22 23 24 25 26 27 28 |
# File 'lib/gs2/inbox/Client.rb', line 22 def self.ENDPOINT(v = nil) if v @@ENDPOINT = v else return @@ENDPOINT end end |
Instance Method Details
#create_inbox(request) ⇒ Array
受信ボックスを作成
GS2-Inbox を利用するにはまず受信ボックスを作成します。
受信ボックスを作成後、受信ボックスにメッセージを送信することでメッセージを届けることができます。
1つの受信ボックスで、複数のユーザのメッセージを扱うことができますので、ユーザ数分の受信ボックスを作成する必要はありません。
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/gs2/inbox/Client.rb', line 77 def create_inbox(request) if not request; raise ArgumentError.new(); end body = {} if request.has_key?('name'); body['name'] = request['name']; end if request.has_key?('serviceClass'); body['serviceClass'] = request['serviceClass']; end if request.has_key?('autoDelete'); body['autoDelete'] = request['autoDelete']; end if request.has_key?('cooperationUrl'); body['cooperationUrl'] = request['cooperationUrl']; end query = {} return post( 'Gs2Inbox', 'CreateInbox', @@ENDPOINT, '/inbox', body, query); end |
#delete_inbox(request) ⇒ Object
受信ボックスを削除
188 189 190 191 192 193 194 195 196 197 198 199 |
# File 'lib/gs2/inbox/Client.rb', line 188 def delete_inbox(request) if not request; raise ArgumentError.new(); end if not request.has_key?('inboxName'); raise ArgumentError.new(); end if not request['inboxName']; raise ArgumentError.new(); end query = {} return delete( 'Gs2Inbox', 'DeleteInbox', @@ENDPOINT, '/inbox/' + request['inboxName'], query); end |
#delete_message(request) ⇒ Object
メッセージを削除
accessToken には Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 |
# File 'lib/gs2/inbox/Client.rb', line 390 def (request) if not request; raise ArgumentError.new(); end if not request.has_key?('inboxName'); raise ArgumentError.new(); end if not request['inboxName']; raise ArgumentError.new(); end if not request.has_key?('messageId'); raise ArgumentError.new(); end if not request['messageId']; raise ArgumentError.new(); end if not request.has_key?('accessToken'); raise ArgumentError.new(); end if not request['accessToken']; raise ArgumentError.new(); end query = {} header = { 'X-GS2-ACCESS-TOKEN' => request['accessToken'] } return delete( 'Gs2Inbox', 'DeleteMessage', @@ENDPOINT, '/inbox/' + request['inboxName'] + '/message/' + request['messageId'], query, header); end |
#delete_messages(request) ⇒ Object
メッセージを複数同時に削除する。
accessToken には Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 |
# File 'lib/gs2/inbox/Client.rb', line 477 def (request) if not request; raise ArgumentError.new(); end if not request.has_key?('inboxName'); raise ArgumentError.new(); end if not request['inboxName']; raise ArgumentError.new(); end if not request.has_key?('messageIds'); raise ArgumentError.new(); end if not request['messageIds']; raise ArgumentError.new(); end if not request.has_key?('accessToken'); raise ArgumentError.new(); end if not request['accessToken']; raise ArgumentError.new(); end query = {} if request.has_key?('messageIds') query['messageIds'] = request['messageIds'] if query['messageIds'].is_a?(Array); query['messageIds'] = query['messageIds'].join(','); end end header = { 'X-GS2-ACCESS-TOKEN' => request['accessToken'] } return delete( 'Gs2Inbox', 'DeleteMessages', @@ENDPOINT, '/inbox/' + request['inboxName'] + '/message/multiple', query, header); end |
#describe_inbox(pageToken = nil, limit = nil) ⇒ Array
受信ボックスリストを取得
45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/gs2/inbox/Client.rb', line 45 def describe_inbox(pageToken = nil, limit = nil) query = {} if pageToken; query['pageToken'] = pageToken; end if limit; query['limit'] = limit; end return get( 'Gs2Inbox', 'DescribeInbox', @@ENDPOINT, '/inbox', query); end |
#describe_message(request, pageToken = nil, limit = nil) ⇒ Array
メッセージリストを取得
accessToken には Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
-
nextPageToken => 次ページトークン
279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 |
# File 'lib/gs2/inbox/Client.rb', line 279 def (request, pageToken = nil, limit = nil) if not request; raise ArgumentError.new(); end if not request.has_key?('inboxName'); raise ArgumentError.new(); end if not request['inboxName']; raise ArgumentError.new(); end if not request.has_key?('accessToken'); raise ArgumentError.new(); end if not request['accessToken']; raise ArgumentError.new(); end query = {} if pageToken; query['pageToken'] = pageToken; end if limit; query['limit'] = limit; end header = { 'X-GS2-ACCESS-TOKEN' => request['accessToken'] } return get( 'Gs2Inbox', 'DescribeMessage', @@ENDPOINT, '/inbox/' + request['inboxName'] + '/message', query, header); end |
#describe_service_class ⇒ Array
サービスクラスリストを取得
97 98 99 100 101 102 103 104 105 106 |
# File 'lib/gs2/inbox/Client.rb', line 97 def describe_service_class() query = {} result = get( 'Gs2Inbox', 'DescribeServiceClass', @@ENDPOINT, '/inbox/serviceClass', query); return result['items']; end |
#get_inbox(request) ⇒ Array
受信ボックスを取得
121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/gs2/inbox/Client.rb', line 121 def get_inbox(request) if not request; raise ArgumentError.new(); end if not request.has_key?('inboxName'); raise ArgumentError.new(); end query = {} return get( 'Gs2Inbox', 'GetInbox', @@ENDPOINT, '/inbox/' + request['inboxName'], query); end |
#get_inbox_status(request) ⇒ Array
受信ボックスのステータスを取得
139 140 141 142 143 144 145 146 147 148 149 150 |
# File 'lib/gs2/inbox/Client.rb', line 139 def get_inbox_status(request) if not request; raise ArgumentError.new(); end if not request.has_key?('inboxName'); raise ArgumentError.new(); end if not request['inboxName']; raise ArgumentError.new(); end query = {} return get( 'Gs2Inbox', 'GetInboxStatus', @@ENDPOINT, '/inbox/' + request['inboxName'] + '/status', query); end |
#get_message(request) ⇒ Array
メッセージを取得
314 315 316 317 318 319 320 321 322 323 324 325 326 327 |
# File 'lib/gs2/inbox/Client.rb', line 314 def (request) if not request; raise ArgumentError.new(); end if not request.has_key?('inboxName'); raise ArgumentError.new(); end if not request['inboxName']; raise ArgumentError.new(); end if not request.has_key?('messageId'); raise ArgumentError.new(); end if not request['messageId']; raise ArgumentError.new(); end query = {} return get( 'Gs2Inbox', 'GetMessage', @@ENDPOINT, '/inbox/' + request['inboxName'] + '/message/' + request['messageId'], query); end |
#read_message(request) ⇒ Array
メッセージを開封
受信ボックスの設定で開封時自動削除設定が有効な場合は、メッセージは削除されます。
連携用URLを呼び出す設定になっている場合、連携用URLにメッセージIDを付与したコールバックが実行されます。
このコールバックをうけて、持ち物を増やしたりすることでメッセージにアイテムを添付することができます。
レスポンスには連携用URLを呼び出した際の応答内容も含まれますので、開封時にさらにメッセージを表示させるようなこともできます。
例えば、連携用URLを呼び出した際に「アイテムを手に入れた」というレスポンスを返すことで、このAPIのレスポンスにその文字列も含んだ形で応答されますので、
開封時にさらにその応答メッセージを使って画面にメッセージとして「アイテムを手に入れた」という表示をすることができます。
開封時のコールバックは通信障害などの理由により、コールバック先のサーバは正しく処理を行えたけれど、
GS2側のインフラにレスポンスが届かず、結果的に処理が失敗する可能性を考慮する必要があります。
この場合、複数回の開封コールバックが呼び出される可能性がありますので、コールバック処理は冪等性を持った形で実装するようにしてください。
accessToken には Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 |
# File 'lib/gs2/inbox/Client.rb', line 359 def (request) if not request; raise ArgumentError.new(); end if not request.has_key?('inboxName'); raise ArgumentError.new(); end if not request['inboxName']; raise ArgumentError.new(); end if not request.has_key?('messageId'); raise ArgumentError.new(); end if not request['messageId']; raise ArgumentError.new(); end if not request.has_key?('accessToken'); raise ArgumentError.new(); end if not request['accessToken']; raise ArgumentError.new(); end body = {} query = {} header = { 'X-GS2-ACCESS-TOKEN' => request['accessToken'] } return post( 'Gs2Inbox', 'ReadMessage', @@ENDPOINT, '/inbox/' + request['inboxName'] + '/message/' + request['messageId'], body, query, header); end |
#read_messages(request) ⇒ Array
メッセージを複数同時に既読にする。
受信ボックスの設定で開封時自動削除設定が有効な場合は、メッセージは削除されます。
連携用URLを呼び出す設定になっている場合、連携用URLにメッセージIDを付与したコールバックが実行されます。
このコールバックをうけて、持ち物を増やしたりすることでメッセージにアイテムを添付することができます。
レスポンスには連携用URLを呼び出した際の応答内容も含まれますので、開封時にさらにメッセージを表示させるようなこともできます。
例えば、連携用URLを呼び出した際に「アイテムを手に入れた」というレスポンスを返すことで、このAPIのレスポンスにその文字列も含んだ形で応答されますので、
開封時にさらにその応答メッセージを使って画面にメッセージとして「アイテムを手に入れた」という表示をすることができます。
開封時のコールバックは通信障害などの理由により、コールバック先のサーバは正しく処理を行えたけれど、
GS2側のインフラにレスポンスが届かず、結果的に処理が失敗する可能性を考慮する必要があります。
この場合、複数回の開封コールバックが呼び出される可能性がありますので、コールバック処理は冪等性を持った形で実装するようにしてください。
accessToken には Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 |
# File 'lib/gs2/inbox/Client.rb', line 442 def (request) if not request; raise ArgumentError.new(); end if not request.has_key?('inboxName'); raise ArgumentError.new(); end if not request['inboxName']; raise ArgumentError.new(); end if not request.has_key?('messageIds'); raise ArgumentError.new(); end if not request['messageIds']; raise ArgumentError.new(); end if not request.has_key?('accessToken'); raise ArgumentError.new(); end if not request['accessToken']; raise ArgumentError.new(); end body = {} if request.has_key?('messageIds') body['messageIds'] = request['messageIds'] if body['messageIds'].is_a?(Array); body['messageIds'] = body['messageIds'].join(','); end end query = {} header = { 'X-GS2-ACCESS-TOKEN' => request['accessToken'] } return post( 'Gs2Inbox', 'ReadMessages', @@ENDPOINT, '/inbox/' + request['inboxName'] + '/message/multiple', body, query, header); end |
#send_message(request) ⇒ Array
メッセージを送信
メッセージを受信ボックスに送信します。
メッセージには本文との他に開封時通知を有効にするかのフラグ、既読状態のフラグといった情報が付加されています。
開封時通知を有効にすると、受信ボックスに設定された連携用URLにメッセージIDがPOSTリクエストで通知されます。
メッセージ送信時にも送信したメッセージIDが取得できますので、
例えば、メッセージに課金用アイテムを添付したい場合は以下の様なメッセージを送信します。
-
送信先: user-0001
-
メッセージ本文: サーバ障害のお詫びです
-
開封時通知: 有効
このAPIの戻り値に含まれるメッセージIDとユーザID、アイテムの内容(課金用アイテム)をひも付けて保存します。
その後、ユーザがこのメッセージを開封すると、連携用URLにこのメッセージのメッセージIDが通知されます。
それを受けて、ユーザIDのアカウントにアイテムの内容(課金用アイテム)を付与します。
これで、メッセージにアイテムを添付することができます。
また、連携用URLを呼び出した際にエラー応答することで、メッセージの開封を失敗させることができます。
これによって、持ち物がいっぱいの場合などにアイテムの付与に失敗しても再度開封処理を実行させることができます。
開封時のコールバックは通信障害などの理由により、コールバック先のサーバは正しく処理を行えたけれど、
GS2側のインフラにレスポンスが届かず、結果的に処理が失敗する可能性を考慮する必要があります。
この場合、複数回の開封コールバックが呼び出される可能性がありますので、コールバック処理は冪等性を持った形で実装するようにしてください。
241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 |
# File 'lib/gs2/inbox/Client.rb', line 241 def (request) if not request; raise ArgumentError.new(); end if not request.has_key?('inboxName'); raise ArgumentError.new(); end if not request['inboxName']; raise ArgumentError.new(); end body = {} if request.has_key?('userId'); body['userId'] = request['userId']; end if request.has_key?('message'); body['message'] = request['message']; end if request.has_key?('cooperation'); body['cooperation'] = request['cooperation']; end query = {} return post( 'Gs2Inbox', 'SendMessage', @@ENDPOINT, '/inbox/' + request['inboxName'] + '/message', body, query); end |
#update_inbox(request) ⇒ Array
受信ボックスを更新
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
# File 'lib/gs2/inbox/Client.rb', line 167 def update_inbox(request) if not request; raise ArgumentError.new(); end if not request.has_key?('inboxName'); raise ArgumentError.new(); end if not request['inboxName']; raise ArgumentError.new(); end body = {} if request.has_key?('serviceClass'); body['serviceClass'] = request['serviceClass']; end if request.has_key?('cooperationUrl'); body['cooperationUrl'] = request['cooperationUrl']; end query = {} return put( 'Gs2Inbox', 'UpdateInbox', @@ENDPOINT, '/inbox/' + request['inboxName'], body, query); end |