|
3 | 3 | require 'fcm/connection' |
4 | 4 | require 'fcm/client/notification_delivery' |
5 | 5 | require 'fcm/client/notification_setting' |
| 6 | +require 'fcm/client/instance_topic_management' |
6 | 7 |
|
7 | 8 | module Fcm |
8 | 9 | # A Fcm Client class to handle legacy protocol API connections |
9 | 10 | class Client |
10 | | - include Connection |
| 11 | + include Fcm::Connection |
11 | 12 | include Fcm::Client::NotificationDilivery |
12 | 13 | include Fcm::Client::NotificationSetting |
13 | | - |
14 | | - INSTANCE_ID_API = 'https://iid.googleapis.com' |
15 | | - TOPIC_REGEX = /[a-zA-Z0-9\-_.~%]+/ |
| 14 | + include Fcm::Client::InstanceTopicManagement |
16 | 15 |
|
17 | 16 | def initialize(api_key) |
18 | 17 | @api_key = api_key |
19 | 18 | end |
20 | 19 |
|
21 | | - def topic_subscription(topic, registration_id) |
22 | | - end_point = "/iid/v1/#{registration_id}/rel/topics/#{topic}" |
23 | | - res = make_request(:post, INSTANCE_ID_API, end_point, nil, client_headers) |
24 | | - build_response(res) |
25 | | - end |
26 | | - |
27 | | - def batch_topic_subscription(topic, registration_ids) |
28 | | - manage_topics_relationship(topic, registration_ids, 'Add') |
29 | | - end |
30 | | - |
31 | | - def batch_topic_unsubscription(topic, registration_ids) |
32 | | - manage_topics_relationship(topic, registration_ids, 'Remove') |
33 | | - end |
34 | | - |
35 | | - def batch_subscribe_instance_ids_to_topic(instance_ids, topic_name) |
36 | | - manage_topics_relationship(topic_name, instance_ids, 'Add') |
37 | | - end |
38 | | - |
39 | | - def batch_unsubscribe_instance_ids_from_topic(instance_ids, topic_name) |
40 | | - manage_topics_relationship(topic_name, instance_ids, 'Remove') |
41 | | - end |
42 | | - |
43 | | - def subscribe_instance_id_to_topic(iid_token, topic_name) |
44 | | - batch_subscribe_instance_ids_to_topic([iid_token], topic_name) |
45 | | - end |
46 | | - |
47 | | - def unsubscribe_instance_id_from_topic(iid_token, topic_name) |
48 | | - batch_unsubscribe_instance_ids_from_topic([iid_token], topic_name) |
49 | | - end |
50 | | - |
51 | | - def get_instance_id_info(iid_token, options = {}) |
52 | | - params = options |
53 | | - end_point = "/iid/info/#{iid_token}" |
54 | | - res = make_request( |
55 | | - :get, INSTANCE_ID_API, end_point, params, client_headers |
56 | | - ) |
57 | | - build_response(res) |
58 | | - end |
59 | | - |
60 | | - def send_to_topic(topic, options = {}) |
61 | | - return unless topic.gsub(TOPIC_REGEX, '').length.zero? |
62 | | - send_with_notification_key('/topics/' + topic, options) |
63 | | - end |
64 | | - |
65 | 20 | private |
66 | 21 |
|
67 | | - def client_headers |
| 22 | + def authorization_headers |
68 | 23 | { |
69 | 24 | 'Content-Type' => 'application/json', |
70 | 25 | 'Authorization' => "key=#{@api_key}" |
71 | 26 | } |
72 | 27 | end |
73 | | - |
74 | | - def manage_topics_relationship(topic, registration_ids, action) |
75 | | - body = { to: "/topics/#{topic}", registration_tokens: registration_ids } |
76 | | - end_point = "/iid/v1:batch#{action}" |
77 | | - res = make_request( |
78 | | - :post, INSTANCE_ID_API, end_point, body.to_json, client_headers |
79 | | - ) |
80 | | - build_response(res, registration_ids) |
81 | | - end |
82 | | - |
83 | | - def validate_condition?(condition) |
84 | | - validate_condition_format?( |
85 | | - condition |
86 | | - ) && validate_condition_topics?( |
87 | | - condition |
88 | | - ) |
89 | | - end |
90 | | - |
91 | | - def validate_condition_format?(condition) |
92 | | - bad_characters = condition.gsub( |
93 | | - /(topics|in|\s|\(|\)|(&&)|[!]|(\|\|)|'([a-zA-Z0-9\-_.~%]+)')/, |
94 | | - '' |
95 | | - ) |
96 | | - bad_characters.length.zero? |
97 | | - end |
98 | | - |
99 | | - def validate_condition_topics?(condition) |
100 | | - topics = condition.scan(/(?:^|\S|\s)'([^']*?)'(?:$|\S|\s)/).flatten |
101 | | - topics.all? { |topic| topic.gsub(TOPIC_REGEX, '').length.zero? } |
102 | | - end |
103 | 28 | end |
104 | 29 | end |
0 commit comments