jpush 3.1.1 → 3.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/jpush.rb +10 -0
- data/lib/jpush/api_connection_exception.rb +11 -0
- data/lib/jpush/device_client.rb +84 -0
- data/lib/jpush/http_client.rb +32 -18
- data/lib/jpush/jpush_client.rb +81 -7
- data/lib/jpush/model/alias_uids_result.rb +32 -0
- data/lib/jpush/model/exist_result.rb +33 -0
- data/lib/jpush/model/get_messages_result.rb +30 -0
- data/lib/jpush/model/notification/ios_notification.rb +6 -2
- data/lib/jpush/model/options.rb +15 -4
- data/lib/jpush/model/push_payload.rb +6 -0
- data/lib/jpush/model/push_result.rb +4 -4
- data/lib/jpush/model/receiveds_result.rb +3 -3
- data/lib/jpush/model/tag_alias.rb +62 -0
- data/lib/jpush/model/tag_alias_result.rb +32 -0
- data/lib/jpush/model/tag_list_result.rb +32 -0
- data/lib/jpush/model/tag_manager.rb +44 -0
- data/lib/jpush/model/user_result.rb +40 -0
- data/lib/jpush/push_client.rb +18 -4
- data/lib/jpush/report_client.rb +11 -6
- data/lib/jpush/response_wrapper.rb +2 -1
- data/lib/jpush/util/service_helper.rb +3 -2
- metadata +13 -26
- data/.gitignore +0 -18
- data/.project +0 -18
- data/Gemfile +0 -4
- data/LICENSE.txt +0 -339
- data/README.md +0 -75
- data/Rakefile +0 -1
- data/example/push_example.rb +0 -101
- data/example/report_example.rb +0 -18
- data/jpush.gemspec +0 -24
- data/test/alert_override_tests.rb +0 -62
- data/test/audience_tests.rb +0 -169
- data/test/base_remote_tests.rb +0 -27
- data/test/message_tests.rb +0 -49
- data/test/notification_tests.rb +0 -52
- data/test/push_payload_test.rb +0 -58
- data/test/report_function_tests.rb +0 -40
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: afc8cbc7711185ef95c4a147eee1be80a71cc18c
|
4
|
+
data.tar.gz: 7c16e63e9a0b54c83ea290a38a36f2205d9903e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef8fdb050300bb47b07d32d1de23497f2335e3d2aa21d4817cdb6207bdb0864acc4e2fdc08b52a8c50387c098fa2b518aca29393636691cfae52673892850997
|
7
|
+
data.tar.gz: 44f804cf52523e6cdc09194923074e51058126212e8058b8f7f80f7b4a98575fe41d229a193a37f9c269135f29b4be36dbaf2862aa05becc2250de1942cc946e
|
data/lib/jpush.rb
CHANGED
@@ -17,4 +17,14 @@ module JPush
|
|
17
17
|
autoload :Notification,'jpush/model/notification/notification'
|
18
18
|
autoload :PushResult, 'jpush/model/push_result'
|
19
19
|
autoload :ReceivedsResult, 'jpush/model/receiveds_result'
|
20
|
+
autoload :DeviceClient, 'jpush/device_client'
|
21
|
+
autoload :TagManager, 'jpush/model/tag_manager'
|
22
|
+
autoload :TagAlias, 'jpush/model/tag_alias'
|
23
|
+
autoload :TagAliasResult, 'jpush/model/tag_alias_result'
|
24
|
+
autoload :ExistResult, 'jpush/model/exist_result'
|
25
|
+
autoload :TagListResult, 'jpush/model/tag_list_result'
|
26
|
+
autoload :AliasUidsResult, 'jpush/model/alias_uids_result'
|
27
|
+
autoload :ApiConnectionException, 'jpush/api_connection_exception'
|
28
|
+
autoload :GetMessagesResult, 'jpush/model/get_messages_result'
|
29
|
+
autoload :UserResult, 'jpush/model/user_result'
|
20
30
|
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
path= File.expand_path('../', __FILE__)
|
2
|
+
require File.join(path, 'http_client.rb')
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
=begin
|
6
|
+
Entrance for Device api.
|
7
|
+
=end
|
8
|
+
module JPush
|
9
|
+
class DeviceClient
|
10
|
+
@@DEVICE_HOST_NAME = 'https://device.jpush.cn'
|
11
|
+
@@DEVICE_PATH = '/v3/devices/'
|
12
|
+
@@TAG_PATH_LIST = '/v3/tags/'
|
13
|
+
|
14
|
+
def initialize(maxRetryTimes)
|
15
|
+
@httpclient = JPush::NativeHttpClient.new(maxRetryTimes)
|
16
|
+
end
|
17
|
+
|
18
|
+
def getDeviceTagAlias(registration_id)
|
19
|
+
result = JPush::TagAliasResult.new
|
20
|
+
url = @@DEVICE_HOST_NAME + @@DEVICE_PATH + registration_id
|
21
|
+
puts url
|
22
|
+
wrapper = @httpclient.sendGet(url, nil)
|
23
|
+
result.fromResponse(wrapper)
|
24
|
+
return result
|
25
|
+
end
|
26
|
+
|
27
|
+
def updateDeviceTagAlias(registration_id, tagAlias)
|
28
|
+
json_data = JSON.generate(tagAlias.toJSON)
|
29
|
+
url = @@DEVICE_HOST_NAME + @@DEVICE_PATH + registration_id
|
30
|
+
return @httpclient.sendPost(url, json_data)
|
31
|
+
end
|
32
|
+
|
33
|
+
def getAppkeyTagList()
|
34
|
+
url = @@DEVICE_HOST_NAME + @@TAG_PATH_LIST
|
35
|
+
tag_list = JPush::TagListResult.new
|
36
|
+
wrapper = @httpclient.sendGet(url, nil)
|
37
|
+
tag_list.fromResponse(wrapper)
|
38
|
+
return tag_list
|
39
|
+
end
|
40
|
+
|
41
|
+
def userExistsInTag(tag_value, registration_id)
|
42
|
+
result = JPush::ExistResult.new
|
43
|
+
url = @@DEVICE_HOST_NAME + '/v3/tags/' + tag_value + '/registration_ids/' + registration_id
|
44
|
+
wrapper = @httpclient.sendGet(url, nil)
|
45
|
+
result.fromResponse(wrapper)
|
46
|
+
return result
|
47
|
+
end
|
48
|
+
|
49
|
+
def tagAddingOrRemovingUsers(tag_value, tagManager)
|
50
|
+
json_data = JSON.generate(tagManager.toJSON)
|
51
|
+
url = @@DEVICE_HOST_NAME + '/v3/tags/' + tag_value
|
52
|
+
return @httpclient.sendPost(url, json_data)
|
53
|
+
end
|
54
|
+
|
55
|
+
def tagDelete(tag_value, platform)
|
56
|
+
|
57
|
+
url = @@DEVICE_HOST_NAME + '/v3/tags/' + tag_value
|
58
|
+
if platform != nil
|
59
|
+
url = url + '?platform=' + platform
|
60
|
+
end
|
61
|
+
return @httpclient.sendDelete(url, nil)
|
62
|
+
end
|
63
|
+
|
64
|
+
def getAliasUids(alias_value, platform)
|
65
|
+
aliasUidsResult = JPush::AliasUidsResult.new
|
66
|
+
url = @@DEVICE_HOST_NAME + '/v3/aliases/' + alias_value
|
67
|
+
if platform != nil
|
68
|
+
url = url + '?platform=' + platform
|
69
|
+
end
|
70
|
+
wrapper = @httpclient.sendGet(url, nil)
|
71
|
+
aliasUidsResult.fromResponse(wrapper)
|
72
|
+
return aliasUidsResult
|
73
|
+
end
|
74
|
+
|
75
|
+
def aliasDelete(alias_value, platform)
|
76
|
+
url = @@DEVICE_HOST_NAME + '/v3/aliases/' + alias_value
|
77
|
+
if platform != nil
|
78
|
+
url = url + '?platform=' + platform
|
79
|
+
end
|
80
|
+
return @httpclient.sendDelete(url, nil)
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
data/lib/jpush/http_client.rb
CHANGED
@@ -8,32 +8,39 @@ require 'net/https'
|
|
8
8
|
|
9
9
|
module JPush
|
10
10
|
class NativeHttpClient
|
11
|
-
def initialize(maxRetryTimes = 5)
|
11
|
+
def initialize(maxRetryTimes = 5, opts = {})
|
12
12
|
@maxRetryTimes = maxRetryTimes
|
13
13
|
@logger = Logger.new(STDOUT)
|
14
|
+
@@proxy_addr = opts[:proxy_addr]
|
15
|
+
@@proxy_port = opts[:proxy_port]
|
14
16
|
end
|
15
17
|
|
16
|
-
def sendPost(url, content
|
17
|
-
return sendRequest(url, content, 'POST'
|
18
|
+
def sendPost(url, content)
|
19
|
+
return sendRequest(url, content, 'POST')
|
18
20
|
end
|
19
21
|
|
20
|
-
def sendGet(url, content
|
21
|
-
return sendRequest(url, content, 'GET'
|
22
|
+
def sendGet(url, content)
|
23
|
+
return sendRequest(url, content, 'GET')
|
22
24
|
end
|
25
|
+
|
26
|
+
def sendDelete(url, content)
|
27
|
+
return sendRequest(url, content, 'DELETE')
|
28
|
+
end
|
29
|
+
|
23
30
|
private
|
24
31
|
|
25
|
-
def sendRequest(url, content, method
|
26
|
-
wrapper = _sendRequest(url, content, method, authCode)
|
32
|
+
def sendRequest(url, content, method)
|
27
33
|
retryTimes = 0
|
28
34
|
while retryTimes < @maxRetryTimes
|
29
35
|
begin
|
30
|
-
|
36
|
+
wrapper = _sendRequest(url, content, method)
|
31
37
|
break
|
32
|
-
rescue
|
38
|
+
rescue Exception=> ex
|
39
|
+
puts ex.class
|
33
40
|
if retryTimes > @maxRetryTimes
|
34
41
|
raise RuntimeError.new('connect error')
|
35
42
|
else
|
36
|
-
@logger.debug('Retry again - ' + (retryTimes + 1))
|
43
|
+
@logger.debug('Retry again - ' + (retryTimes + 1).to_s)
|
37
44
|
retryTimes = retryTimes + 1
|
38
45
|
end
|
39
46
|
end
|
@@ -42,7 +49,7 @@ module JPush
|
|
42
49
|
end
|
43
50
|
private
|
44
51
|
|
45
|
-
def _sendRequest(url, content, method
|
52
|
+
def _sendRequest(url, content, method)
|
46
53
|
begin
|
47
54
|
|
48
55
|
header = {}
|
@@ -50,22 +57,26 @@ module JPush
|
|
50
57
|
header['Connection'] = 'Keep-Alive'
|
51
58
|
header['Charset'] = 'UTF-8'
|
52
59
|
header['Content-Type'] = 'application/json'
|
53
|
-
header['Authorization'] =
|
60
|
+
header['Authorization'] = $authcode
|
54
61
|
#url = url+content
|
62
|
+
#url.gsub!(/[^\w$&\-+.,\/:;=?@]/) { |x| x = format("%%%x", x[0]) }
|
63
|
+
url = URI.escape(url)
|
55
64
|
uri = URI.parse(url)
|
56
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
65
|
+
http = Net::HTTP.new(uri.host, uri.port, @@proxy_addr, @@proxy_port)
|
57
66
|
http.use_ssl = true
|
58
|
-
|
59
|
-
http.open_timeout =
|
67
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
68
|
+
http.open_timeout = 30
|
60
69
|
http.read_timeout = 30
|
61
70
|
use_ssl = true
|
62
71
|
if method == 'POST' && use_ssl == true
|
63
72
|
req = Net::HTTP::Post.new(uri.path, initheader = header)
|
64
|
-
|
65
|
-
|
73
|
+
req.body = content
|
74
|
+
response = http.request(req)
|
66
75
|
elsif method == 'GET' && use_ssl == true
|
67
76
|
request = Net::HTTP::Get.new(uri.request_uri, initheader = header)
|
68
77
|
response = http.request(request)
|
78
|
+
elsif method == 'DELETE' && use_ssl == true
|
79
|
+
response = http.delete(uri.path, initheader = header)
|
69
80
|
end
|
70
81
|
#if method == 'POST'
|
71
82
|
# @response = http.post(path,content,header)
|
@@ -78,11 +89,14 @@ module JPush
|
|
78
89
|
wrapper.code = code
|
79
90
|
wrapper.setResponseContent(response.body)
|
80
91
|
headers = response.header.to_hash
|
92
|
+
if response['X-Rate-Limit-Limit'] == nil
|
93
|
+
else
|
81
94
|
quota = response['X-Rate-Limit-Limit']
|
82
95
|
remaining = response['X-Rate-Limit-Remaining']
|
83
96
|
reset = response['X-Rate-Limit-Reset']
|
84
|
-
|
85
97
|
wrapper.setRateLimit(Integer(quota), Integer(remaining), Integer(reset))
|
98
|
+
end
|
99
|
+
|
86
100
|
if code == 200
|
87
101
|
@logger.debug('Succeed to get response - 200 OK')
|
88
102
|
if content != nil
|
data/lib/jpush/jpush_client.rb
CHANGED
@@ -14,7 +14,6 @@ Create a JPush Client.
|
|
14
14
|
masterSecret API access secret of the appKey.
|
15
15
|
appKey The KEY of one application on JPush.
|
16
16
|
=end
|
17
|
-
|
18
17
|
def initialize(appkey, masterSecret, maxRetryTimes = 5)
|
19
18
|
begin
|
20
19
|
@logger = Logger.new(STDOUT)
|
@@ -33,22 +32,28 @@ appKey The KEY of one application on JPush.
|
|
33
32
|
@masterSecret = masterSecret
|
34
33
|
@pushClient = JPush::PushClient.new(maxRetryTimes = maxRetryTimes)
|
35
34
|
@reportClient = JPush::ReportClient.new(maxRetryTimes = maxRetryTimes)
|
36
|
-
@
|
35
|
+
@deviceClient = JPush::DeviceClient.new(maxRetryTimes = maxRetryTimes)
|
36
|
+
$authcode = ServiceHelper.getAuthorizationBase64(appkey, masterSecret)
|
37
37
|
end
|
38
38
|
|
39
39
|
# Send a push with object.
|
40
40
|
# @param pushPayload payload object of a push.
|
41
41
|
# @return JSON data.
|
42
42
|
def sendPush(payload)
|
43
|
-
result = @pushClient.sendPush(payload
|
43
|
+
result = @pushClient.sendPush(payload)
|
44
44
|
return result
|
45
45
|
end
|
46
46
|
|
47
|
+
def validate(payload)
|
48
|
+
result = @pushClient.validate(payload)
|
49
|
+
return result
|
50
|
+
end
|
51
|
+
|
47
52
|
#Get received report.
|
48
53
|
# @param msgIds 100 msgids to batch getting is supported.
|
49
54
|
# @return JSON data.
|
50
55
|
def getReportReceiveds(msgIds)
|
51
|
-
result = @reportClient.getReceiveds(msgIds
|
56
|
+
result = @reportClient.getReceiveds(msgIds)
|
52
57
|
return result
|
53
58
|
end
|
54
59
|
|
@@ -56,7 +61,7 @@ appKey The KEY of one application on JPush.
|
|
56
61
|
# @param msgIds 100 msgids to batch getting is supported.
|
57
62
|
# @return JSON data.
|
58
63
|
def getReportMessages(msgIds)
|
59
|
-
result = @reportClient.getMessages(msgIds
|
64
|
+
result = @reportClient.getMessages(msgIds)
|
60
65
|
return result
|
61
66
|
end
|
62
67
|
|
@@ -65,11 +70,80 @@ appKey The KEY of one application on JPush.
|
|
65
70
|
#@param start is a string for example 2014-06-10
|
66
71
|
#@duration
|
67
72
|
# @return JSON data.
|
68
|
-
|
69
73
|
def getReportUsers(timeUnit, start, duration)
|
70
|
-
result = @reportClient.getUsers(timeUnit, start, duration
|
74
|
+
result = @reportClient.getUsers(timeUnit, start, duration)
|
71
75
|
return result
|
72
76
|
end
|
73
77
|
|
78
|
+
# Get user profile
|
79
|
+
#@param registration_id
|
80
|
+
#Response Data
|
81
|
+
#{
|
82
|
+
# "tags": ["tag1", "tag2"],
|
83
|
+
# "alias": "alias1" }
|
84
|
+
def getDeviceTagAlias(registration_id)
|
85
|
+
return @deviceClient.getDeviceTagAlias(registration_id)
|
86
|
+
end
|
87
|
+
|
88
|
+
=begin
|
89
|
+
Update user device profile
|
90
|
+
@param registration_id
|
91
|
+
@param tagAlias
|
92
|
+
=end
|
93
|
+
def updateDeviceTagAlias(registration_id, tagAlias)
|
94
|
+
return @deviceClient.updateDeviceTagAlias(registration_id, tagAlias);
|
95
|
+
end
|
96
|
+
|
97
|
+
=begin
|
98
|
+
Appkey Tag List
|
99
|
+
=end
|
100
|
+
def getAppkeyTagList()
|
101
|
+
return @deviceClient.getAppkeyTagList
|
102
|
+
end
|
103
|
+
|
104
|
+
=begin
|
105
|
+
User Exists In Tag
|
106
|
+
@param tag_value
|
107
|
+
@param registration_id
|
108
|
+
=end
|
109
|
+
def userExistsInTag(tag_value, registration_id)
|
110
|
+
return @deviceClient.userExistsInTag(tag_value, registration_id)
|
111
|
+
end
|
112
|
+
|
113
|
+
=begin
|
114
|
+
Tag Adding or Removing Users
|
115
|
+
@param tag_value
|
116
|
+
@param registration_ids
|
117
|
+
=end
|
118
|
+
def tagAddingOrRemovingUsers(tag_value, registration_ids)
|
119
|
+
return @deviceClient.tagAddingOrRemovingUsers(tag_value, registration_ids)
|
120
|
+
end
|
121
|
+
|
122
|
+
=begin
|
123
|
+
Tag Delete
|
124
|
+
@param tag_value
|
125
|
+
@param platform default is all
|
126
|
+
=end
|
127
|
+
def tagDelete(tag_value, platform = nil)
|
128
|
+
return @deviceClient.tagDelete(tag_value, platform)
|
129
|
+
end
|
130
|
+
|
131
|
+
=begin
|
132
|
+
get alias uids
|
133
|
+
@param alias_value
|
134
|
+
@param platform default is all
|
135
|
+
=end
|
136
|
+
def getAliasUids(alias_value, platform = nil)
|
137
|
+
return @deviceClient.getAliasUids(alias_value, platform)
|
138
|
+
end
|
139
|
+
|
140
|
+
=begin
|
141
|
+
Alias Delete
|
142
|
+
@param alias_value
|
143
|
+
@param platform
|
144
|
+
=end
|
145
|
+
def aliasDelete(alias_value, platform = nil)
|
146
|
+
return @deviceClient.aliasDelete(alias_value, platform)
|
147
|
+
end
|
74
148
|
end
|
75
149
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module JPush
|
4
|
+
class AliasUidsResult
|
5
|
+
attr_accessor :registration_ids, :isok
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
@isok=false
|
9
|
+
end
|
10
|
+
def fromResponse(wrapper)
|
11
|
+
if wrapper.code != 200
|
12
|
+
logger = Logger.new(STDOUT)
|
13
|
+
logger.error('Error response from JPush server. Should review and fix it. ')
|
14
|
+
logger.info('HTTP Status:' + wrapper.code.to_s)
|
15
|
+
logger.info('Error Message:' + wrapper.error.to_s)
|
16
|
+
raise JPush::ApiConnectionException.new(wrapper)
|
17
|
+
end
|
18
|
+
content = wrapper.getResponseContent
|
19
|
+
hash = JSON.parse(content)
|
20
|
+
@registration_ids = hash['registration_ids']
|
21
|
+
@isok=true
|
22
|
+
return self
|
23
|
+
end
|
24
|
+
|
25
|
+
def toJSON
|
26
|
+
array={}
|
27
|
+
array['registration_ids'] = @registration_ids
|
28
|
+
return array
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'logger'
|
3
|
+
|
4
|
+
module JPush
|
5
|
+
class ExistResult
|
6
|
+
attr_accessor :result, :isok
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@isok=false
|
10
|
+
end
|
11
|
+
def fromResponse(wrapper)
|
12
|
+
if wrapper.code != 200
|
13
|
+
logger = Logger.new(STDOUT)
|
14
|
+
logger.error('Error response from JPush server. Should review and fix it. ')
|
15
|
+
logger.info('HTTP Status:' + wrapper.code.to_s)
|
16
|
+
logger.info('Error Message:' + wrapper.error.to_s)
|
17
|
+
raise JPush::ApiConnectionException.new(wrapper)
|
18
|
+
end
|
19
|
+
content = wrapper.getResponseContent
|
20
|
+
hash = JSON.parse(content)
|
21
|
+
@result = hash['result']
|
22
|
+
@isok=true
|
23
|
+
return self
|
24
|
+
end
|
25
|
+
|
26
|
+
def toJSON
|
27
|
+
array={}
|
28
|
+
array['result'] = @result
|
29
|
+
return array
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
module JPush
|
4
|
+
class GetMessagesResult
|
5
|
+
attr_accessor :isok, :result
|
6
|
+
def initialize
|
7
|
+
@isok = false
|
8
|
+
end
|
9
|
+
|
10
|
+
def fromResponse(wrapper)
|
11
|
+
if wrapper.code != 200
|
12
|
+
logger = Logger.new(STDOUT)
|
13
|
+
logger.error('Error response from JPush server. Should review and fix it. ')
|
14
|
+
logger.info('HTTP Status:' + wrapper.code.to_s)
|
15
|
+
logger.info('Error Message' + wrapper.error.to_s)
|
16
|
+
raise JPush::ApiConnectionException.new(wrapper)
|
17
|
+
end
|
18
|
+
content = wrapper.getResponseContent
|
19
|
+
@result = JSON.parse(content)
|
20
|
+
return self
|
21
|
+
end
|
22
|
+
|
23
|
+
def toJSON
|
24
|
+
return @result.to_json
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
end
|