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
- @@ENDPOINT =
'inbox'
- @@VARIATION =
'a'
Class Method Summary collapse
-
.ENDPOINT(v = nil) ⇒ Object
デバッグ用。通常利用する必要はありません。.
-
.VARIATION(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() でログインして取得したアクセストークンを指定してください。
. -
#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() でログインして取得したアクセストークンを指定してください。
. -
#send_message(request) ⇒ Array
メッセージを送信
メッセージを受信ボックスに送信します。
メッセージには本文との他に開封時通知を有効にするかのフラグ、既読状態のフラグといった情報が付加されています。
開封時通知を有効にすると、受信ボックスに設定された連携用URLにメッセージIDがPOSTリクエストで通知されます。
メッセージ送信時にも送信したメッセージIDが取得できますので、
例えば、メッセージに課金用アイテムを添付したい場合は以下の様なメッセージを送信します。
. -
#update_inbox(request) ⇒ Array
受信ボックスを更新.
Constructor Details
#initialize(region, gs2_client_id, gs2_client_secret) ⇒ Client
コンストラクタ
18 19 20 |
# File 'lib/gs2/inbox/Client.rb', line 18 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
デバッグ用。通常利用する必要はありません。
23 24 25 26 27 28 29 |
# File 'lib/gs2/inbox/Client.rb', line 23 def self.ENDPOINT(v = nil) if v @@ENDPOINT = v else return @@ENDPOINT end end |
.VARIATION(v = nil) ⇒ Object
デバッグ用。通常利用する必要はありません。
32 33 34 35 36 37 38 |
# File 'lib/gs2/inbox/Client.rb', line 32 def self.VARIATION(v = nil) if v @@VARIATION = v else return @@VARIATION end end |
Instance Method Details
#create_inbox(request) ⇒ Array
受信ボックスを作成
GS2-Inbox を利用するにはまず受信ボックスを作成します。
受信ボックスを作成後、受信ボックスにメッセージを送信することでメッセージを届けることができます。
1つの受信ボックスで、複数のユーザのメッセージを扱うことができますので、ユーザ数分の受信ボックスを作成する必要はありません。
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/gs2/inbox/Client.rb', line 88 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, @@VARIATION, '/inbox', body, query); end |
#delete_inbox(request) ⇒ Object
受信ボックスを削除
204 205 206 207 208 209 210 211 212 213 214 215 216 |
# File 'lib/gs2/inbox/Client.rb', line 204 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, @@VARIATION, '/inbox/' + request['inboxName'], query); end |
#delete_message(request) ⇒ Object
メッセージを削除
accessToken には
Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 |
# File 'lib/gs2/inbox/Client.rb', line 411 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, @@VARIATION, '/inbox/' + request['inboxName'] + '/message/' + request['messageId'], query, header); end |
#describe_inbox(pageToken = nil, limit = nil) ⇒ Array
受信ボックスリストを取得
55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/gs2/inbox/Client.rb', line 55 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, @@VARIATION, '/inbox', query); end |
#describe_message(request, pageToken = nil, limit = nil) ⇒ Array
メッセージリストを取得
accessToken には
Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
-
nextPageToken => 次ページトークン
297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 |
# File 'lib/gs2/inbox/Client.rb', line 297 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, @@VARIATION, '/inbox/' + request['inboxName'] + '/message', query, header); end |
#describe_service_class ⇒ Array
サービスクラスリストを取得
109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/gs2/inbox/Client.rb', line 109 def describe_service_class() query = {} result = get( 'Gs2Inbox', 'DescribeServiceClass', @@ENDPOINT, @@VARIATION, '/inbox/serviceClass', query); return result['items']; end |
#get_inbox(request) ⇒ Array
受信ボックスを取得
134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'lib/gs2/inbox/Client.rb', line 134 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, @@VARIATION, '/inbox/' + request['inboxName'], query); end |
#get_inbox_status(request) ⇒ Array
受信ボックスのステータスを取得
153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/gs2/inbox/Client.rb', line 153 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, @@VARIATION, '/inbox/' + request['inboxName'] + '/status', query); end |
#get_message(request) ⇒ Array
メッセージを取得
333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 |
# File 'lib/gs2/inbox/Client.rb', line 333 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, @@VARIATION, '/inbox/' + request['inboxName'] + '/message/' + request['messageId'], query); end |
#read_message(request) ⇒ Array
メッセージを開封
受信ボックスの設定で開封時自動削除設定が有効な場合は、メッセージは削除されます。
連携用URLを呼び出す設定になっている場合、連携用URLにメッセージIDを付与したコールバックが実行されます。
このコールバックをうけて、持ち物を増やしたりすることでメッセージにアイテムを添付することができます。
レスポンスには連携用URLを呼び出した際の応答内容も含まれますので、開封時にさらにメッセージを表示させるようなこともできます。
例えば、連携用URLを呼び出した際に「アイテムを手に入れた」というレスポンスを返すことで、このAPIのレスポンスにその文字列も含んだ形で応答されますので、
開封時にさらにその応答メッセージを使って画面にメッセージとして「アイテムを手に入れた」という表示をすることができます。
開封時のコールバックは通信障害などの理由により、コールバック先のサーバは正しく処理を行えたけれど、
GS2側のインフラにレスポンスが届かず、結果的に処理が失敗する可能性を考慮する必要があります。
この場合、複数回の開封コールバックが呼び出される可能性がありますので、コールバック処理は冪等性を持った形で実装するようにしてください。
accessToken には
Gs2::Auth::Client::login() でログインして取得したアクセストークンを指定してください。
379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 |
# File 'lib/gs2/inbox/Client.rb', line 379 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, @@VARIATION, '/inbox/' + request['inboxName'] + '/message/' + request['messageId'], body, query, header); end |
#send_message(request) ⇒ Array
メッセージを送信
メッセージを受信ボックスに送信します。
メッセージには本文との他に開封時通知を有効にするかのフラグ、既読状態のフラグといった情報が付加されています。
開封時通知を有効にすると、受信ボックスに設定された連携用URLにメッセージIDがPOSTリクエストで通知されます。
メッセージ送信時にも送信したメッセージIDが取得できますので、
例えば、メッセージに課金用アイテムを添付したい場合は以下の様なメッセージを送信します。
-
送信先: user-0001
-
メッセージ本文: サーバ障害のお詫びです
-
開封時通知: 有効
このAPIの戻り値に含まれるメッセージIDとユーザID、アイテムの内容(課金用アイテム)をひも付けて保存します。
その後、ユーザがこのメッセージを開封すると、連携用URLにこのメッセージのメッセージIDが通知されます。
それを受けて、ユーザIDのアカウントにアイテムの内容(課金用アイテム)を付与します。
これで、メッセージにアイテムを添付することができます。
また、連携用URLを呼び出した際にエラー応答することで、メッセージの開封を失敗させることができます。
これによって、持ち物がいっぱいの場合などにアイテムの付与に失敗しても再度開封処理を実行させることができます。
開封時のコールバックは通信障害などの理由により、コールバック先のサーバは正しく処理を行えたけれど、
GS2側のインフラにレスポンスが届かず、結果的に処理が失敗する可能性を考慮する必要があります。
この場合、複数回の開封コールバックが呼び出される可能性がありますので、コールバック処理は冪等性を持った形で実装するようにしてください。
258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 |
# File 'lib/gs2/inbox/Client.rb', line 258 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, @@VARIATION, '/inbox/' + request['inboxName'] + '/message', body, query); end |
#update_inbox(request) ⇒ Array
受信ボックスを更新
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'lib/gs2/inbox/Client.rb', line 182 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, @@VARIATION, '/inbox/' + request['inboxName'], body, query); end |