urbanairship 5.7.0 → 8.0.0
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/.github/PULL_REQUEST_TEMPLATE.md +2 -2
- data/.travis.yml +2 -2
- data/CHANGELOG +33 -0
- data/README.rst +95 -38
- data/docs/attributes.rst +73 -0
- data/docs/index.rst +3 -0
- data/docs/named_user.rst +22 -0
- data/docs/push.rst +24 -0
- data/docs/sms.rst +19 -0
- data/docs/static_lists.rst +2 -2
- data/lib/urbanairship.rb +7 -0
- data/lib/urbanairship/ab_tests/ab_test.rb +8 -9
- data/lib/urbanairship/automations/automation.rb +11 -11
- data/lib/urbanairship/client.rb +34 -12
- data/lib/urbanairship/common.rb +110 -43
- data/lib/urbanairship/configuration.rb +2 -1
- data/lib/urbanairship/custom_events/custom_event.rb +60 -0
- data/lib/urbanairship/custom_events/payload.rb +89 -0
- data/lib/urbanairship/devices/attribute.rb +54 -0
- data/lib/urbanairship/devices/attributes.rb +53 -0
- data/lib/urbanairship/devices/channel_tags.rb +2 -2
- data/lib/urbanairship/devices/channel_uninstall.rb +10 -10
- data/lib/urbanairship/devices/create_and_send.rb +4 -4
- data/lib/urbanairship/devices/devicelist.rb +28 -7
- data/lib/urbanairship/devices/email.rb +5 -5
- data/lib/urbanairship/devices/named_user.rb +22 -12
- data/lib/urbanairship/devices/open_channel.rb +22 -23
- data/lib/urbanairship/devices/segment.rb +6 -8
- data/lib/urbanairship/devices/sms.rb +40 -9
- data/lib/urbanairship/devices/static_lists.rb +12 -12
- data/lib/urbanairship/push/location.rb +18 -18
- data/lib/urbanairship/push/push.rb +5 -5
- data/lib/urbanairship/push/schedule.rb +9 -0
- data/lib/urbanairship/reports/response_statistics.rb +42 -31
- data/lib/urbanairship/version.rb +1 -1
- data/urbanairship.gemspec +1 -0
- metadata +25 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8c91f31ef623a57075fe0acde9fe467d17dc2b0bbb634070c8da11cad54b08f5
|
|
4
|
+
data.tar.gz: eefb6b294cd953148c27fa91bae207888cbb163c6ec620301aa41b243046b46a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 1c19a821551da7ad1593c91ef7dd0c922dd2f4637ee74a2f29a1fcecce0db4185b09e0fa908fedcc6b124897c3bcd9a41c1070d841b6cef45436ac26a5ba3382
|
|
7
|
+
data.tar.gz: 15bd6f34bf76d038d359b79443f7c12464345ea1cf3cc959254a2350b597a5a91be89940713d3de4a5caba50495cd66ea3cb39cbb6e91ad067d511f8c69af4f8
|
|
@@ -15,8 +15,8 @@ Please include link to open issue if applicable.
|
|
|
15
15
|
|
|
16
16
|
* I've tested for Ruby versions:
|
|
17
17
|
|
|
18
|
-
- [ ] 2.
|
|
19
|
-
- [ ] 2.
|
|
18
|
+
- [ ] 2.6.7
|
|
19
|
+
- [ ] 2.7.2
|
|
20
20
|
|
|
21
21
|
### Airship Contribution Agreement
|
|
22
22
|
[Link here](https://docs.google.com/forms/d/e/1FAIpQLScErfiz-fXSPpVZ9r8Di2Tr2xDFxt5MgzUel0__9vqUgvko7Q/viewform)
|
data/.travis.yml
CHANGED
data/CHANGELOG
CHANGED
|
@@ -1,3 +1,36 @@
|
|
|
1
|
+
--------------------
|
|
2
|
+
8.0.0
|
|
3
|
+
--------------------
|
|
4
|
+
- Updates officially supported versions to 2.6.7 and 2.7.2
|
|
5
|
+
- Fixes headers to reduce warning messages
|
|
6
|
+
- Fixes for multiple mis-set named user urls
|
|
7
|
+
- Fix to automatically convert an integer named user to a string so it can be successfully submitted
|
|
8
|
+
- Adds attribute support for named users
|
|
9
|
+
|
|
10
|
+
--------------------
|
|
11
|
+
7.0.0
|
|
12
|
+
--------------------
|
|
13
|
+
- Refactors base url naming
|
|
14
|
+
|
|
15
|
+
--------------------
|
|
16
|
+
6.0.0
|
|
17
|
+
--------------------
|
|
18
|
+
- Creates custom base url, and refactors urls within classes
|
|
19
|
+
- Adds support for sending custom events
|
|
20
|
+
|
|
21
|
+
--------------------
|
|
22
|
+
5.9.0
|
|
23
|
+
--------------------
|
|
24
|
+
- Adds support for bearer token auth
|
|
25
|
+
- Updates broken code for static lists
|
|
26
|
+
- Adds support for update sms channel
|
|
27
|
+
|
|
28
|
+
--------------------
|
|
29
|
+
5.8.0
|
|
30
|
+
--------------------
|
|
31
|
+
- Adds scheudling support for PTSO
|
|
32
|
+
- Adds attribute support
|
|
33
|
+
|
|
1
34
|
--------------------
|
|
2
35
|
5.7.0
|
|
3
36
|
--------------------
|
data/README.rst
CHANGED
|
@@ -14,16 +14,16 @@ Requirements
|
|
|
14
14
|
|
|
15
15
|
We officially support the following Ruby versions::
|
|
16
16
|
|
|
17
|
-
2.
|
|
18
|
-
2.
|
|
17
|
+
2.6.7
|
|
18
|
+
2.7.2
|
|
19
19
|
|
|
20
|
-
Newer versions should work as well.
|
|
20
|
+
Newer 2.x versions should work as well.
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
Functionality
|
|
24
24
|
=============
|
|
25
25
|
|
|
26
|
-
Version
|
|
26
|
+
Version 8.0 is a major upgrade, as we have changed the tested/supported versions of Ruby. A more detailed list of changes can be found in the CHANGELOG.
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
Questions
|
|
@@ -38,17 +38,23 @@ Installation
|
|
|
38
38
|
|
|
39
39
|
If you have the ``bundler`` gem (if not you can get it with
|
|
40
40
|
``$ gem install bundler``) add this line to your application's
|
|
41
|
-
Gemfile
|
|
41
|
+
Gemfile:
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
.. code-block::
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
>>> $ gem 'urbanairship'
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
And then execute:
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
.. code-block::
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
>>> $ bundle
|
|
52
|
+
|
|
53
|
+
OR install it yourself as:
|
|
54
|
+
|
|
55
|
+
.. code-block::
|
|
56
|
+
|
|
57
|
+
>>> $ gem install urbanairship
|
|
52
58
|
|
|
53
59
|
|
|
54
60
|
Configuration
|
|
@@ -56,27 +62,35 @@ Configuration
|
|
|
56
62
|
|
|
57
63
|
In your app initialization, you can do something like the following:
|
|
58
64
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
+
.. code-block:: ruby
|
|
66
|
+
|
|
67
|
+
require 'urbanairship'
|
|
68
|
+
|
|
69
|
+
Urbanairship.configure do |config|
|
|
70
|
+
config.server = 'go.airship.eu'
|
|
71
|
+
config.log_path = '/path/to/your/logfile'
|
|
72
|
+
config.log_level = Logger::WARN
|
|
73
|
+
config.timeout = 60
|
|
74
|
+
end
|
|
75
|
+
|
|
65
76
|
|
|
66
77
|
If you want to use a custom logger (e.g Rails.logger), you can do:
|
|
67
78
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
79
|
+
.. code-block:: ruby
|
|
80
|
+
|
|
81
|
+
require 'urbanairship'
|
|
82
|
+
|
|
83
|
+
Urbanairship.configure do |config|
|
|
84
|
+
config.custom_logger = Rails.logger
|
|
85
|
+
config.log_level = Logger::WARN
|
|
86
|
+
end
|
|
74
87
|
|
|
75
88
|
Available Configurations
|
|
76
89
|
------------------------
|
|
77
90
|
|
|
78
91
|
- **log_path**: Allows to define the folder where the log file will be created (the default is nil).
|
|
79
92
|
- **log_level**: Allows to define the log level and only messages at that level or higher will be printed (the default is INFO).
|
|
93
|
+
- **server**: Allow to define the Airship server you want to use ("go.airship.eu" or "go.urbanairship.com")
|
|
80
94
|
- **timeout**: Allows to define the request timeout in seconds (the default is 5).
|
|
81
95
|
|
|
82
96
|
|
|
@@ -96,28 +110,71 @@ information.
|
|
|
96
110
|
Broadcast to All Devices
|
|
97
111
|
------------------------
|
|
98
112
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
>>> p.notification = UA.notification(alert: 'Hello')
|
|
105
|
-
>>> p.device_types = UA.all
|
|
106
|
-
>>> p.send_push
|
|
113
|
+
.. code-block:: ruby
|
|
114
|
+
|
|
115
|
+
require 'urbanairship'
|
|
116
|
+
|
|
117
|
+
UA = Urbanairship
|
|
107
118
|
|
|
119
|
+
airship = UA::Client.new(key:'application_key', secret:'master_secret')
|
|
120
|
+
p = airship.create_push
|
|
121
|
+
p.audience = UA.all
|
|
122
|
+
p.notification = UA.notification(alert: 'Hello')
|
|
123
|
+
p.device_types = UA.all
|
|
124
|
+
p.send_push
|
|
108
125
|
|
|
109
126
|
Simple Tag Push
|
|
110
127
|
---------------
|
|
111
128
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
129
|
+
.. code-block:: ruby
|
|
130
|
+
|
|
131
|
+
require 'urbanairship'
|
|
132
|
+
|
|
133
|
+
UA = Urbanairship
|
|
134
|
+
|
|
135
|
+
airship = UA::Client.new(key:'application_key', secret:'master_secret')
|
|
136
|
+
p = airship.create_push
|
|
137
|
+
p.audience = UA.tag('some_tag')
|
|
138
|
+
p.notification = UA.notification(alert: 'Hello')
|
|
139
|
+
p.device_types = UA.all
|
|
140
|
+
p.send_push
|
|
141
|
+
|
|
142
|
+
Specify the Airship server used to make your requests
|
|
143
|
+
-----------------------------------------------------
|
|
144
|
+
By default, the request will be sent to the 'go.urbanairship.com' server:
|
|
145
|
+
|
|
146
|
+
.. code-block:: ruby
|
|
147
|
+
|
|
148
|
+
require 'urbanairship'
|
|
149
|
+
|
|
150
|
+
Urbanairship::Client.new(key:'application_key', secret:'master_secret')
|
|
151
|
+
|
|
152
|
+
You can change the server globally in the Urbanairship configuration:
|
|
153
|
+
|
|
154
|
+
.. code-block:: ruby
|
|
155
|
+
|
|
156
|
+
require 'urbanairship'
|
|
157
|
+
|
|
158
|
+
Urbanairship.configure do |config|
|
|
159
|
+
config.server = 'go.airship.eu'
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
Urbanairship::Client.new(key:'application_key', secret:'master_secret')
|
|
163
|
+
# request will be sent to the 'go.airship.eu' server
|
|
164
|
+
|
|
165
|
+
Finally, you can change the targeted server on a request basis:
|
|
166
|
+
|
|
167
|
+
.. code-block:: ruby
|
|
168
|
+
|
|
169
|
+
require 'urbanairship'
|
|
170
|
+
|
|
171
|
+
Urbanairship.configure do |config|
|
|
172
|
+
config.server = 'go.airship.eu'
|
|
173
|
+
end
|
|
120
174
|
|
|
175
|
+
Urbanairship::Client.new(key:'application_key', secret:'master_secret', server: 'go.urbanairship.com')
|
|
176
|
+
# The Urbanairship configuration is overridden by the client and the
|
|
177
|
+
# request will be sent to the 'go.urbanairship.com' server
|
|
121
178
|
|
|
122
179
|
Contributing
|
|
123
180
|
============
|
data/docs/attributes.rst
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
Attributes
|
|
2
|
+
==========
|
|
3
|
+
|
|
4
|
+
Set Attribute for a Channel
|
|
5
|
+
---------------------------
|
|
6
|
+
|
|
7
|
+
The following will set an attribute for a given channel ID.
|
|
8
|
+
|
|
9
|
+
.. code-block:: ruby
|
|
10
|
+
|
|
11
|
+
require 'urbanairship'
|
|
12
|
+
UA = Urbanairship
|
|
13
|
+
airship = UA::Client.new(key:'app_key', secret:'secret_key')
|
|
14
|
+
channel_info = UA::ChannelInfo.new(client: airship)
|
|
15
|
+
channel_info.audience = {"ios_channel": "b8f9b663-0a3b-cf45-587a-be880946e881"}
|
|
16
|
+
channel_info.attributes = {
|
|
17
|
+
"action": "set",
|
|
18
|
+
"key": "favorite_food",
|
|
19
|
+
"value": "cake"
|
|
20
|
+
}
|
|
21
|
+
channel_info.set_attributes
|
|
22
|
+
|
|
23
|
+
.. note::
|
|
24
|
+
|
|
25
|
+
This should return a 200 response
|
|
26
|
+
|
|
27
|
+
Set or Remove Attributes for a Named User
|
|
28
|
+
-----------------------------------------
|
|
29
|
+
|
|
30
|
+
The following example shows you how to set and remove attributes on a given named user.
|
|
31
|
+
|
|
32
|
+
.. code-block:: ruby
|
|
33
|
+
|
|
34
|
+
require 'urbanairship'
|
|
35
|
+
airship = Urbanairship::Client.new(key: 'application_key', secret: 'master_secret')
|
|
36
|
+
named_user = Urbanairship::NamedUser.new(client: airship)
|
|
37
|
+
named_user.named_user_id = 'named_user'
|
|
38
|
+
named_user.update_attributes(attributes: [
|
|
39
|
+
{ action: 'set', key: 'first_name', value: 'Firstname' },
|
|
40
|
+
{ action: 'remove', key: 'nickname' },
|
|
41
|
+
{ action: 'set', key: 'last_name', value: 'Lastname', timestamp: Time.now.utc }
|
|
42
|
+
])
|
|
43
|
+
|
|
44
|
+
.. note::
|
|
45
|
+
|
|
46
|
+
Timestamp is optional, if missing it will default to 'now'
|
|
47
|
+
|
|
48
|
+
Send Push to Audience with Attribute Specifications
|
|
49
|
+
---------------------------------------------------
|
|
50
|
+
|
|
51
|
+
This will send a push to an audience who meet the specifications of attribute we
|
|
52
|
+
set here. This example is using a text attribute where we are looking for audience
|
|
53
|
+
members whose favorite food includes 'apple'. Some examples of what this could return
|
|
54
|
+
would be 'apple', 'pineapple', or 'apple pie'.
|
|
55
|
+
|
|
56
|
+
.. code-block:: ruby
|
|
57
|
+
|
|
58
|
+
require 'urbanairship'
|
|
59
|
+
UA = Urbanairship
|
|
60
|
+
airship = UA::Client.new(key:'app_key', secret:'secret_key')
|
|
61
|
+
new_attribute = UA::Attribute.new(client: airship)
|
|
62
|
+
new_attribute.attribute = 'favorite_food'
|
|
63
|
+
new_attribute.operator = 'contains'
|
|
64
|
+
new_attribute.value = 'apple'
|
|
65
|
+
push = airship.create_push
|
|
66
|
+
push.audience = new_attribute.payload
|
|
67
|
+
push.notification = UA.notification(alert: 'Hello')
|
|
68
|
+
push.device_types = ['android', 'ios', 'web']
|
|
69
|
+
push.send_push
|
|
70
|
+
|
|
71
|
+
.. note::
|
|
72
|
+
|
|
73
|
+
This should return a 202 response
|
data/docs/index.rst
CHANGED
data/docs/named_user.rst
CHANGED
|
@@ -100,3 +100,25 @@ see `the API documentation
|
|
|
100
100
|
|
|
101
101
|
A single request may contain an add or remove field, both, or a single set
|
|
102
102
|
field.
|
|
103
|
+
|
|
104
|
+
Attributes
|
|
105
|
+
----------
|
|
106
|
+
|
|
107
|
+
Set or remove attributes on a named user. For more information, see `the API documentation
|
|
108
|
+
https://docs.airship.com/api/ua/#operation-api-named_users-named_user_id-attributes-post>`__
|
|
109
|
+
|
|
110
|
+
.. code-block:: ruby
|
|
111
|
+
|
|
112
|
+
require 'urbanairship'
|
|
113
|
+
airship = Urbanairship::Client.new(key: 'application_key', secret: 'master_secret')
|
|
114
|
+
named_user = Urbanairship::NamedUser.new(client: airship)
|
|
115
|
+
named_user.named_user_id = 'named_user'
|
|
116
|
+
named_user.update_attributes(attributes: [
|
|
117
|
+
{ action: 'set', key: 'first_name', value: 'Firstname' },
|
|
118
|
+
{ action: 'remove', key: 'nickname' },
|
|
119
|
+
{ action: 'set', key: 'last_name', value: 'Lastname', timestamp: Time.now.utc }
|
|
120
|
+
])
|
|
121
|
+
|
|
122
|
+
.. note::
|
|
123
|
+
|
|
124
|
+
Timestamp is optional, if missing it will default to 'now'.
|
data/docs/push.rst
CHANGED
|
@@ -507,6 +507,30 @@ local time.
|
|
|
507
507
|
If the schedule is unsuccessful, an :rb:class:`AirshipFailure` exception
|
|
508
508
|
will be raised.
|
|
509
509
|
|
|
510
|
+
Scheduled Delivery for Optimal Send Time
|
|
511
|
+
----------------------------------------
|
|
512
|
+
|
|
513
|
+
Scheduled notifications build upon the Push object, and have two other
|
|
514
|
+
components: the scheduled time(s) and an optional name.
|
|
515
|
+
|
|
516
|
+
This example schedules the above notification delivery for optimal send time.
|
|
517
|
+
|
|
518
|
+
.. code-block:: ruby
|
|
519
|
+
|
|
520
|
+
schedule = airship.create_scheduled_push
|
|
521
|
+
schedule.push = push
|
|
522
|
+
schedule.name = "optional name for later reference"
|
|
523
|
+
schedule.schedule = UA.optimal_scheduled_time('2020-02-20')
|
|
524
|
+
response = schedule.send_push
|
|
525
|
+
print ("Created schedule. url: " + response.schedule_url)
|
|
526
|
+
|
|
527
|
+
If the schedule is unsuccessful, an :rb:class:`AirshipFailure` exception
|
|
528
|
+
will be raised.
|
|
529
|
+
|
|
530
|
+
.. note::
|
|
531
|
+
|
|
532
|
+
Make sure the time for UA.optimal_scheduled_time is a date versus a timestamp.
|
|
533
|
+
|
|
510
534
|
|
|
511
535
|
Updating or Canceling a Schedule
|
|
512
536
|
--------------------------------
|
data/docs/sms.rst
CHANGED
|
@@ -21,6 +21,25 @@ request with an opted_in key.
|
|
|
21
21
|
sms_channel.opted_in = '2018-02-13T11:58:59'
|
|
22
22
|
sms_channel.register
|
|
23
23
|
|
|
24
|
+
Update SMS Channel
|
|
25
|
+
-------------------
|
|
26
|
+
|
|
27
|
+
To update an SMS channel you need a sender, MSISDN, and a channel ID.
|
|
28
|
+
|
|
29
|
+
.. code-block:: ruby
|
|
30
|
+
|
|
31
|
+
require 'urbanairship'
|
|
32
|
+
UA = Urbanairship
|
|
33
|
+
airship = UA::Client.new(key:'application_key', secret:'master_secret')
|
|
34
|
+
sms_channel = UA::Sms.new(client: airship)
|
|
35
|
+
sms_channel.msisdn = '15035556789'
|
|
36
|
+
sms_channel.sender = '12345'
|
|
37
|
+
sms_channel.opted_in = '2020-12-14T11:58:59'
|
|
38
|
+
sms_channel.timezone = 'America/Denver'
|
|
39
|
+
sms_channel.channel_id = 'a1b2c3d4e5f6'
|
|
40
|
+
sms_channel.update
|
|
41
|
+
|
|
42
|
+
|
|
24
43
|
Opt-Out of SMS Messages
|
|
25
44
|
-----------------------
|
|
26
45
|
|
data/docs/static_lists.rst
CHANGED
|
@@ -28,7 +28,7 @@ string keys to arbitrary JSON values.
|
|
|
28
28
|
airship = UA::Client.new(key:'application_key', secret:'master_secret')
|
|
29
29
|
static_list = UA::StaticList.new(client: airship)
|
|
30
30
|
static_list.name = 'list_name'
|
|
31
|
-
static_list.create(description: 'description',
|
|
31
|
+
static_list.create(description: 'description', extra: {'key': 'value'})
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
Upload List
|
|
@@ -71,7 +71,7 @@ Updates the metadata of a static list.
|
|
|
71
71
|
airship = UA::Client.new(key:'application_key', secret:'master_secret')
|
|
72
72
|
static_list = UA::StaticList.new(client: airship)
|
|
73
73
|
static_list.name = 'list_name'
|
|
74
|
-
static_list.update(description: 'description', {
|
|
74
|
+
static_list.update(description: 'new description', 'extra': {'new_key': 'new_value' })
|
|
75
75
|
|
|
76
76
|
|
|
77
77
|
Delete List
|
data/lib/urbanairship.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require 'urbanairship/custom_events/custom_event'
|
|
2
|
+
require 'urbanairship/custom_events/payload'
|
|
1
3
|
require 'urbanairship/push/audience'
|
|
2
4
|
require 'urbanairship/push/payload'
|
|
3
5
|
require 'urbanairship/push/schedule'
|
|
@@ -10,6 +12,8 @@ require 'urbanairship/devices/email_notification'
|
|
|
10
12
|
require 'urbanairship/devices/sms_notification'
|
|
11
13
|
require 'urbanairship/devices/mms_notification'
|
|
12
14
|
require 'urbanairship/devices/create_and_send'
|
|
15
|
+
require 'urbanairship/devices/attribute'
|
|
16
|
+
require 'urbanairship/devices/attributes'
|
|
13
17
|
require 'urbanairship/client'
|
|
14
18
|
require 'urbanairship/common'
|
|
15
19
|
require 'urbanairship/configuration'
|
|
@@ -30,10 +34,13 @@ require 'urbanairship/ab_tests/experiment'
|
|
|
30
34
|
require 'urbanairship/ab_tests/ab_test'
|
|
31
35
|
|
|
32
36
|
module Urbanairship
|
|
37
|
+
extend Urbanairship::CustomEvents::Payload
|
|
38
|
+
extend Urbanairship::CustomEvents
|
|
33
39
|
extend Urbanairship::Push::Audience
|
|
34
40
|
extend Urbanairship::Push::Payload
|
|
35
41
|
extend Urbanairship::Push::Schedule
|
|
36
42
|
extend Urbanairship::Push
|
|
43
|
+
include Urbanairship::CustomEvents
|
|
37
44
|
include Urbanairship::Devices
|
|
38
45
|
include Urbanairship::Reports
|
|
39
46
|
include Urbanairship::Push
|