Class: Gs2::Inbox::Client

Inherits:
Core::AbstractClient
  • Object
show all
Defined in:
lib/gs2/inbox/Client.rb

Overview

GS2-Inbox クライアント

Author:

  • Game Server Services, Inc.

Constant Summary collapse

@@ENDPOINT =
'inbox'

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(region, gs2_client_id, gs2_client_secret) ⇒ Client

コンストラクタ

Parameters:

  • region (String)

    リージョン名

  • gs2_client_id (String)

    GSIクライアントID

  • gs2_client_secret (String)

    GSIクライアントシークレット



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つの受信ボックスで、複数のユーザのメッセージを扱うことができますので、ユーザ数分の受信ボックスを作成する必要はありません。

Parameters:

  • request (Array)
    • name => 受信ボックス名

    • serviceClass => サービスクラス

    • autoDelete => 自動削除設定

    • cooperationUrl => 連携用URL

Returns:

  • (Array)
    • item

    • inboxId => 受信ボックスID

    • ownerId => オーナーID

    • name => 受信ボックス名

    • serviceClass => サービスクラス

    • autoDelete => 自動削除設定

    • cooperationUrl => 連携用URL

    • createAt => 作成日時



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

受信ボックスを削除

Parameters:

  • request (Array)
    • inboxName => 受信ボックス名



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() でログインして取得したアクセストークンを指定してください。

Parameters:

  • request (Array)
    • inboxName => 受信ボックス名

    • messageId => メッセージID

    • accessToken => アクセストークン



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 delete_message(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() でログインして取得したアクセストークンを指定してください。

Parameters:

  • request (Array)
    • inboxName => 受信ボックス名

    • messageId => メッセージID

    • accessToken => アクセストークン



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 delete_messages(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

受信ボックスリストを取得

Parameters:

  • pageToken (String) (defaults to: nil)

    ページトークン

  • limit (Integer) (defaults to: nil)

    取得件数

Returns:

  • (Array)
    • items

      Array
      • inboxId => 受信ボックスID

      • ownerId => オーナーID

      • name => 受信ボックス名

      • serviceClass => サービスクラス

      • autoDelete => 自動削除設定

      • cooperationUrl => 連携用URL

      • createAt => 作成日時

    • nextPageToken => 次ページトークン



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 => 次ページトークン

Parameters:

  • request (Array)
    • inboxName => 受信ボックス名

    • accessToken => アクセストークン

  • pageToken (String) (defaults to: nil)

    ページトークン

  • limit (Integer) (defaults to: nil)

    取得件数

Returns:

  • (Array)
    • items

      Array
      • messageId => メッセージID

      • inboxId => 受信ボックスID

      • userId => 受信ユーザID

      • message => メッセージ本文

      • cooperation => 開封時に連携用URLを呼び出すか

      • date => 受信日時

      • read => 既読状態



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 describe_message(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_classArray

サービスクラスリストを取得

Returns:

  • (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

受信ボックスを取得

Parameters:

  • request (Array)
    • inboxName => 受信ボックス名

Returns:

  • (Array)
    • item

      • inboxId => 受信ボックスID

      • ownerId => オーナーID

      • name => 受信ボックス名

      • serviceClass => サービスクラス

      • autoDelete => 自動削除設定

      • cooperationUrl => 連携用URL

      • createAt => 作成日時



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

受信ボックスのステータスを取得

Parameters:

  • request (Array)
    • inboxName => 受信ボックス名

Returns:

  • (Array)
    • status => 状態



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

メッセージを取得

Parameters:

  • request (Array)
    • inboxName => 受信ボックス名

    • messageId => メッセージID

Returns:

  • (Array)
    • item

      • messageId => メッセージID

      • inboxId => 受信ボックスID

      • userId => 受信ユーザID

      • message => メッセージ本文

      • cooperation => 開封時に連携用URLを呼び出すか

      • date => 受信日時

      • read => 既読状態



314
315
316
317
318
319
320
321
322
323
324
325
326
327
# File 'lib/gs2/inbox/Client.rb', line 314

def get_message(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() でログインして取得したアクセストークンを指定してください。

Parameters:

  • request (Array)
    • inboxName => 受信ボックス名

    • messageId => メッセージID

    • accessToken => アクセストークン

Returns:

  • (Array)
    • item

      • messageId => メッセージID

      • inboxId => 受信ボックスID

      • userId => 受信ユーザID

      • message => メッセージ本文

      • cooperation => 開封時に連携用URLを呼び出すか

      • date => 受信日時

      • read => 既読状態



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 read_message(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() でログインして取得したアクセストークンを指定してください。

Parameters:

  • request (Array)
    • inboxName => 受信ボックス名

    • messageIds => メッセージIDリスト

    • accessToken => アクセストークン

Returns:

  • (Array)
    • items

      Array
      • messageId => メッセージID

      • inboxId => 受信ボックスID

      • userId => 受信ユーザID

      • message => メッセージ本文

      • cooperation => 開封時に連携用URLを呼び出すか

      • date => 受信日時

      • read => 既読状態



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 read_messages(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側のインフラにレスポンスが届かず、結果的に処理が失敗する可能性を考慮する必要があります。
この場合、複数回の開封コールバックが呼び出される可能性がありますので、コールバック処理は冪等性を持った形で実装するようにしてください。

Parameters:

  • request (Array)
    • inboxName => 受信ボックス名

    • userId => 宛先ユーザID

    • message => メッセージ本文

    • cooperation => 開封時に連携用URLを呼び出すか

Returns:

  • (Array)
    • item

      • messageId => メッセージID

      • inboxId => 受信ボックスID

      • userId => 受信ユーザID

      • message => メッセージ本文

      • cooperation => 開封時に連携用URLを呼び出すか

      • date => 受信日時

      • read => 既読状態



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 send_message(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

受信ボックスを更新

Parameters:

  • request (Array)
    • inboxName => 受信ボックス名

    • serviceClass => サービスクラス

    • cooperationUrl => 連携用URL

Returns:

  • (Array)
    • item

      • inboxId => 受信ボックスID

      • ownerId => オーナーID

      • name => 受信ボックス名

      • serviceClass => サービスクラス

      • autoDelete => 自動削除設定

      • cooperationUrl => 連携用URL

      • createAt => 作成日時



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