kakao_push 0.1.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 +7 -0
- data/.gitignore +9 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE +21 -0
- data/README.md +105 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/kakao_push.gemspec +28 -0
- data/lib/kakao_push/apns.rb +23 -0
- data/lib/kakao_push/client.rb +103 -0
- data/lib/kakao_push/gcm.rb +21 -0
- data/lib/kakao_push/response.rb +57 -0
- data/lib/kakao_push/version.rb +3 -0
- data/lib/kakao_push.rb +13 -0
- metadata +143 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b4b8321a4fa65fa0a6dfda30ef3b4ca2abd1c980
|
4
|
+
data.tar.gz: 4442e21c9ceb76b11368cf5f0dd78ef8ff7b11d6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7b947d916c75ab047457fdfc2063a545b91562ad6faa3f2d1456258ecccaa76928c8b4acf570c7f928bd2c6b704e401e83075b9dc52f642df0e69fde938b6abd
|
7
|
+
data.tar.gz: ac308a07831049dab17dbb3b29ce7cd6271d16b0905bf5ef2336a2031f739d7cf35c05ebee7cddee8e2ccd190b2892afcb67083a6d60cf4e0398c9d9087a4089
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2015 N42Corp
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
# KakaoPush [](https://badge.fury.io/rb/kakao_push)
|
2
|
+
|
3
|
+
카카오 플랫폼 API에서 제공하는 [푸시알림](https://developers.kakao.com/features/platform#푸시-알림)을 호출하는 젬입니다. iOS, 안드로이드 사용자에게 푸시를 보낼때 유용한 카카오 푸시알림은 REST API로만 제공되고 있기에 이를 젬으로 만들어 봤습니다.
|
4
|
+
|
5
|
+
[당근마켓](https://www.daangn.com/)([아이폰](https://itunes.apple.com/kr/app/pangyojangteo/id1018769995?l=ko&ls=1&mt=8), [안드로이드](https://play.google.com/store/apps/details?id=com.towneers.www))에서 사용하던 코드를 젬으로 만들었습니다.
|
6
|
+
|
7
|
+
주의: 이 젬은 카카오에서 공식적으로 제공하는 젬이 아닙니다. 이점 유의 하시기 바랍니다.
|
8
|
+
|
9
|
+
## 설치
|
10
|
+
|
11
|
+
Gemfile 파일에 다음과 같이 추가하고:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
gem 'kakao_push', '~> 0.0.1'
|
15
|
+
```
|
16
|
+
|
17
|
+
아래 명령어를 실행합니다:
|
18
|
+
|
19
|
+
$ bundle
|
20
|
+
|
21
|
+
혹은 젬을 직접 설치할 수 있습니다:
|
22
|
+
|
23
|
+
$ gem install kakao_push
|
24
|
+
|
25
|
+
## 사용법
|
26
|
+
|
27
|
+
### 클라이언트 객체 생성
|
28
|
+
|
29
|
+
```ruby
|
30
|
+
client = KakaoPush::Client.new(rest_api_key: 'kakao_admin_key')
|
31
|
+
```
|
32
|
+
|
33
|
+
### 토큰 등록
|
34
|
+
|
35
|
+
파라미터 및 응답에 관한 자세한 정보는 [카카오 REST API 개발가이드 - 푸시알림](https://developers.kakao.com/docs/restapi#푸시-알림) 참고
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
res = client.register(uuid: 1, push_type: 'apns', device_id: 'device_id', push_token: 'push_token')
|
39
|
+
|
40
|
+
res.success? # 등록에 성공한 경우 true
|
41
|
+
res.fail? # 등록에 실패한 경우 true
|
42
|
+
res.data # 등록에 성공한 경우 숫자 30 반환. 30일 후에 해당 토큰이 만료됨을 의미
|
43
|
+
=> 30
|
44
|
+
```
|
45
|
+
|
46
|
+
### 토큰 조회
|
47
|
+
|
48
|
+
파라미터 및 응답에 관한 자세한 정보는 [카카오 REST API 개발가이드 - 푸시알림](https://developers.kakao.com/docs/restapi#푸시-알림) 참고
|
49
|
+
|
50
|
+
```ruby
|
51
|
+
res = client.tokens(uuid: 1)
|
52
|
+
|
53
|
+
res.success? # 조희에 성공한 경우 true
|
54
|
+
res.fail? # 조회에 실패한 경우 true
|
55
|
+
res.data # 조회에 성공한 경우 데이터 반환. 배열로 반환되지만 배열 객체는 1개 뿐이므로 유의
|
56
|
+
=> [{"user_id":"1","device_id":"a","push_type":"apns","push_token":"aaa","created_at":"2015-12-11T11:34:17Z","updated_at":"2015-12-11T11:34:17Z"}]
|
57
|
+
```
|
58
|
+
|
59
|
+
### 토큰 삭제
|
60
|
+
|
61
|
+
파라미터 및 응답에 관한 자세한 정보는 [카카오 REST API 개발가이드 - 푸시알림](https://developers.kakao.com/docs/restapi#푸시-알림) 참고
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
res = client.deregister(uuid: 1, push_type: 'apns', device_id: 'device_id')
|
65
|
+
res.success? # 삭제에 성공한 경우 true
|
66
|
+
res.fail? # 삭제에 실패한 경우 true
|
67
|
+
```
|
68
|
+
|
69
|
+
### 푸시 전송
|
70
|
+
|
71
|
+
파라미터 및 응답에 관한 자세한 정보는 [카카오 REST API 개발가이드 - 푸시알림](https://developers.kakao.com/docs/restapi#푸시-알림) 참고
|
72
|
+
|
73
|
+
```ruby
|
74
|
+
apns = KakaoPush::Apns.new(badge: nil, sound: 'default', push_alert: true, message: nil, custom_field: nil, push_token: nil)
|
75
|
+
gcm = KakaoPush::Gcm.new(collapse: nil, delay_while_idle: nil, return_url: nil, custom_field: 'data', push_token: nil)
|
76
|
+
res = client.send(uuids: [1], apns: apns, gcm: gcm, bypass: false)
|
77
|
+
|
78
|
+
res.success? # 전송에 성공한 경우 true
|
79
|
+
res.fail? # 전송에 실패한 경우 true
|
80
|
+
```
|
81
|
+
|
82
|
+
success? 결과가 true이더라도 실제 사용자에 디바이스에 전송되었음을 보장하지 않음. 메시지 포맷이 다르거나 맞지 않아도 success? 값이 true로 반환되기도 하므로 실제 전송 유무는 디바이스에서 테스트가 필요합니다.
|
83
|
+
|
84
|
+
### 서버에 저장할 값
|
85
|
+
|
86
|
+
디바이스로부터 받은 토큰, 푸쉬 타입(apns, gcm)은 서버에 저장하는것이 좋다. 토큰 삭제를 안할거라면 푸쉬 타입은 굳이 저장할 필요 없습니다. 푸쉬 토큰은 30일이 지나면 토큰 조회 API를 통해서도 조회 할 수 없으므로 될수 있으면 저장하는 편이 좋다고 생각합니다.
|
87
|
+
|
88
|
+
예를 들어보자면 디바이스로부터 받은 토큰과 카카오 푸쉬 만료 예정일을 서버에 저장하고 푸쉬 만료 예정일이 되기 전에 다시 토큰 등록 API를 호출하는 사례도 있습니다.
|
89
|
+
|
90
|
+
## 에러 상황
|
91
|
+
|
92
|
+
정상적인 파라미터를 제공 했음에도 아래와 같은 오류가 발생 한다면 Kakao Developers 사이트에서 앱 설정의 '푸시 알림'을 활성화 하고 gcm, apns 설정을 잘 했는지 확인해야 합니다. 설정하지 않은 경우 아래와 같이 파라미터가 잘못됬다고 에러 메시지가 반환됩니다.
|
93
|
+
|
94
|
+
```
|
95
|
+
{"code":-2,"msg":"[appName] Invalid Kpusher Param. ( appName=1111, uid=1234, did=dlskjflsk3ksdjfl, pushType=apns, pushToken=lqO_NIwaoAcI0MssA )"}%
|
96
|
+
```
|
97
|
+
|
98
|
+
## 도움 주신 분들
|
99
|
+
|
100
|
+
- [@marocchino](https://github.com/marocchino) : 테스트 코드에서 막혀 있을때 도움 주셨습니다.
|
101
|
+
- [@shia](https://github.com/riseshia) : 응답 및 푸시 메시지 구조를 잡는데 도움 주셨습니다.
|
102
|
+
|
103
|
+
## Contributing
|
104
|
+
|
105
|
+
버그 레포팅과 풀리퀘스트는 GitHub에 남겨주세요. https://github.com/n42corp/kakao_push
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "kakao_push"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
data/kakao_push.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'kakao_push/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "kakao_push"
|
8
|
+
spec.version = KakaoPush::VERSION
|
9
|
+
spec.authors = ["ChangHoon Jung"]
|
10
|
+
spec.email = ["iamseapy@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{카카오 플랫폼 API에서 제공하는 푸시알림을 호출하는 젬입니다.}
|
13
|
+
spec.description = %q{카카오 플랫폼 API에서 제공하는 푸시알림을 호출하는 젬입니다. iOS, 안드로이드 사용자에게 푸시를 보낼때 유용한 카카오 푸시알림은 REST API로만 제공되고 있기에 이를 젬으로 만들어 봤습니다.}
|
14
|
+
spec.homepage = "https://github.com/n42corp/kakao_push"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|example)/}) }
|
17
|
+
spec.bindir = "exe"
|
18
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "multi_json"
|
22
|
+
spec.add_dependency "faraday", "~> 0.9.2"
|
23
|
+
spec.add_dependency "faraday_middleware", "~> 0.10.0"
|
24
|
+
|
25
|
+
spec.add_development_dependency "bundler", "~> 1.10"
|
26
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
27
|
+
spec.add_development_dependency "minitest"
|
28
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module KakaoPush
|
2
|
+
class Apns
|
3
|
+
def initialize(badge: nil, sound: nil, push_alert: nil, message: nil, custom_field: nil, push_token: nil)
|
4
|
+
@badge = badge
|
5
|
+
@sound = sound
|
6
|
+
@push_alert = push_alert
|
7
|
+
@message = message
|
8
|
+
@custom_field = custom_field
|
9
|
+
@push_token = push_token
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_hash
|
13
|
+
for_apns = {}
|
14
|
+
for_apns['badge'] = @badge if !@badge.nil?
|
15
|
+
for_apns['sound'] = @sound if !@sound.nil?
|
16
|
+
for_apns['push_alert'] = @push_alert if !@push_alert.nil?
|
17
|
+
for_apns['message'] = @message if !@message.nil?
|
18
|
+
for_apns['custom_field'] = @custom_field if !@custom_field.nil?
|
19
|
+
for_apns['push_token'] = @push_token if !@push_token.nil?
|
20
|
+
for_apns
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
module KakaoPush
|
2
|
+
class Client
|
3
|
+
API_HOST = "https://kapi.kakao.com"
|
4
|
+
|
5
|
+
attr_accessor :rest_api_key
|
6
|
+
|
7
|
+
def initialize(rest_api_key:)
|
8
|
+
@rest_api_key = rest_api_key
|
9
|
+
|
10
|
+
self.connection = build_connection
|
11
|
+
end
|
12
|
+
|
13
|
+
def register(uuid:, push_type:, device_id:, push_token:)
|
14
|
+
body = {
|
15
|
+
'uuid' => uuid,
|
16
|
+
'device_id' => device_id,
|
17
|
+
'push_type' => push_type,
|
18
|
+
'push_token' => push_token
|
19
|
+
}
|
20
|
+
|
21
|
+
KakaoPush::Response.new(
|
22
|
+
connection.post do |req|
|
23
|
+
req.url url_for('/register')
|
24
|
+
req.body = body
|
25
|
+
end
|
26
|
+
)
|
27
|
+
end
|
28
|
+
|
29
|
+
def deregister(uuid:, push_type:, device_id:)
|
30
|
+
body = {
|
31
|
+
'uuid' => uuid,
|
32
|
+
'device_id' => device_id,
|
33
|
+
'push_type' => push_type
|
34
|
+
}
|
35
|
+
|
36
|
+
KakaoPush::Response.new(
|
37
|
+
connection.post do |req|
|
38
|
+
req.url url_for('/deregister')
|
39
|
+
req.body = body
|
40
|
+
end
|
41
|
+
)
|
42
|
+
end
|
43
|
+
|
44
|
+
def tokens(uuid:)
|
45
|
+
KakaoPush::Response.new(
|
46
|
+
connection.get do |req|
|
47
|
+
req.url url_for('/tokens')
|
48
|
+
req.params['uuid'] = uuid
|
49
|
+
end
|
50
|
+
)
|
51
|
+
end
|
52
|
+
|
53
|
+
def send(uuids: [], apns:, gcm:, bypass: false)
|
54
|
+
body = {
|
55
|
+
'uuids': uuids.to_json,
|
56
|
+
'push_message': build_message(apns: apns, gcm: gcm).to_json,
|
57
|
+
'bypass': bypass
|
58
|
+
}
|
59
|
+
|
60
|
+
KakaoPush::Response.new(
|
61
|
+
connection.post do |req|
|
62
|
+
req.url url_for('/send')
|
63
|
+
req.body = body
|
64
|
+
end
|
65
|
+
)
|
66
|
+
end
|
67
|
+
|
68
|
+
def build_connection(&block)
|
69
|
+
Faraday.new(faraday_client_options) do |builder|
|
70
|
+
builder.request :url_encoded
|
71
|
+
if block.nil?
|
72
|
+
builder.adapter Faraday.default_adapter
|
73
|
+
else
|
74
|
+
block.call(builder)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
private
|
80
|
+
|
81
|
+
attr_accessor :connection
|
82
|
+
|
83
|
+
def faraday_client_options
|
84
|
+
{
|
85
|
+
headers: {
|
86
|
+
"Authorization" => "KakaoAK #{@rest_api_key}"
|
87
|
+
},
|
88
|
+
url: API_HOST
|
89
|
+
}
|
90
|
+
end
|
91
|
+
|
92
|
+
def url_for(path)
|
93
|
+
"/v1/push#{path}"
|
94
|
+
end
|
95
|
+
|
96
|
+
def build_message(apns:, gcm:)
|
97
|
+
{
|
98
|
+
"for_apns" => apns.to_hash,
|
99
|
+
"for_gcm" => gcm.to_hash
|
100
|
+
}
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module KakaoPush
|
2
|
+
class Gcm
|
3
|
+
def initialize(collapse: nil, delay_while_idle: nil, return_url: nil, custom_field: nil, push_token: nil)
|
4
|
+
@collapse = collapse
|
5
|
+
@delay_while_idle = delay_while_idle
|
6
|
+
@return_url = return_url
|
7
|
+
@custom_field = custom_field
|
8
|
+
@push_token = push_token
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_hash
|
12
|
+
for_gcm = {}
|
13
|
+
for_gcm['collapse'] = @collapse if !@collapse.nil?
|
14
|
+
for_gcm['delay_while_idle'] = @delay_while_idle if !@delay_while_idle.nil?
|
15
|
+
for_gcm['return_url'] = @return_url if !@return_url.nil?
|
16
|
+
for_gcm['custom_field'] = @custom_field if !@custom_field.nil?
|
17
|
+
for_gcm['push_token'] = @push_token if !@push_token.nil?
|
18
|
+
for_gcm
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'multi_json'
|
2
|
+
|
3
|
+
module KakaoPush
|
4
|
+
class Response
|
5
|
+
def initialize(faraday_response)
|
6
|
+
@raw_body = faraday_response.body
|
7
|
+
@raw_status = faraday_response.status
|
8
|
+
end
|
9
|
+
|
10
|
+
def body
|
11
|
+
@body ||= MultiJson.load(@raw_body) if !@raw_body.nil? && !@raw_body.empty?
|
12
|
+
end
|
13
|
+
|
14
|
+
def status
|
15
|
+
@raw_status
|
16
|
+
end
|
17
|
+
|
18
|
+
def success?
|
19
|
+
status == 200
|
20
|
+
end
|
21
|
+
|
22
|
+
def fail?
|
23
|
+
!success?
|
24
|
+
end
|
25
|
+
|
26
|
+
def data
|
27
|
+
success? ? body : nil
|
28
|
+
end
|
29
|
+
|
30
|
+
def error_code
|
31
|
+
if fail? && body.is_a?(Hash) && body.has_key?('code')
|
32
|
+
return body['code']
|
33
|
+
end
|
34
|
+
nil
|
35
|
+
end
|
36
|
+
|
37
|
+
def error_message
|
38
|
+
if fail? && body.is_a?(Hash) && body.has_key?('msg')
|
39
|
+
return body['msg']
|
40
|
+
end
|
41
|
+
nil
|
42
|
+
end
|
43
|
+
|
44
|
+
def to_s
|
45
|
+
<<-EOS
|
46
|
+
KakaoPush::Response
|
47
|
+
status : #{status}
|
48
|
+
success? : #{success?}
|
49
|
+
fail? : #{fail?}
|
50
|
+
data : #{data}
|
51
|
+
error_code : #{error_code}
|
52
|
+
error_message : #{error_message}
|
53
|
+
|
54
|
+
EOS
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
data/lib/kakao_push.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require "faraday"
|
2
|
+
require "faraday_middleware"
|
3
|
+
require "json"
|
4
|
+
|
5
|
+
require "kakao_push/response"
|
6
|
+
require "kakao_push/client"
|
7
|
+
require "kakao_push/apns"
|
8
|
+
require "kakao_push/gcm"
|
9
|
+
require "kakao_push/version"
|
10
|
+
|
11
|
+
module KakaoPush
|
12
|
+
# Your code goes here...
|
13
|
+
end
|
metadata
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kakao_push
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- ChangHoon Jung
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-12-12 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: multi_json
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: faraday
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.9.2
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.9.2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: faraday_middleware
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.10.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.10.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.10'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.10'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '10.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '10.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: minitest
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
description: "카카오 플랫폼 API에서 제공하는 푸시알림을 호출하는 젬입니다. iOS, 안드로이드 사용자에게 푸시를 보낼때 유용한 카카오
|
98
|
+
푸시알림은 REST API로만 제공되고 있기에 이를 젬으로 만들어 봤습니다."
|
99
|
+
email:
|
100
|
+
- iamseapy@gmail.com
|
101
|
+
executables: []
|
102
|
+
extensions: []
|
103
|
+
extra_rdoc_files: []
|
104
|
+
files:
|
105
|
+
- ".gitignore"
|
106
|
+
- ".travis.yml"
|
107
|
+
- Gemfile
|
108
|
+
- LICENSE
|
109
|
+
- README.md
|
110
|
+
- Rakefile
|
111
|
+
- bin/console
|
112
|
+
- bin/setup
|
113
|
+
- kakao_push.gemspec
|
114
|
+
- lib/kakao_push.rb
|
115
|
+
- lib/kakao_push/apns.rb
|
116
|
+
- lib/kakao_push/client.rb
|
117
|
+
- lib/kakao_push/gcm.rb
|
118
|
+
- lib/kakao_push/response.rb
|
119
|
+
- lib/kakao_push/version.rb
|
120
|
+
homepage: https://github.com/n42corp/kakao_push
|
121
|
+
licenses: []
|
122
|
+
metadata: {}
|
123
|
+
post_install_message:
|
124
|
+
rdoc_options: []
|
125
|
+
require_paths:
|
126
|
+
- lib
|
127
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - ">="
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '0'
|
137
|
+
requirements: []
|
138
|
+
rubyforge_project:
|
139
|
+
rubygems_version: 2.4.5
|
140
|
+
signing_key:
|
141
|
+
specification_version: 4
|
142
|
+
summary: "카카오 플랫폼 API에서 제공하는 푸시알림을 호출하는 젬입니다."
|
143
|
+
test_files: []
|