Skip to content

Commit 5c0b348

Browse files
authored
Merge branch 'master' into issue-1072
2 parents 814bc6d + 4f73761 commit 5c0b348

File tree

6 files changed

+97
-13
lines changed

6 files changed

+97
-13
lines changed

.github/workflows/release.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ jobs:
7878
startsWith(github.event.pull_request.title, '[chore] Release ')
7979

8080
runs-on: ubuntu-latest
81+
permissions:
82+
contents: write
8183

8284
steps:
8385
- name: Checkout source for publish

pom.xml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
<groupId>com.google.firebase</groupId>
2121
<artifactId>firebase-admin</artifactId>
22-
<version>9.4.3</version>
22+
<version>9.5.0</version>
2323
<packaging>jar</packaging>
2424

2525
<name>firebase-admin</name>
@@ -59,7 +59,7 @@
5959
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
6060
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
6161
<skipUTs>${skipTests}</skipUTs>
62-
<netty.version>4.1.117.Final</netty.version>
62+
<netty.version>4.2.1.Final</netty.version>
6363
</properties>
6464

6565
<scm>
@@ -189,7 +189,7 @@
189189
<plugin>
190190
<groupId>org.jacoco</groupId>
191191
<artifactId>jacoco-maven-plugin</artifactId>
192-
<version>0.8.12</version>
192+
<version>0.8.13</version>
193193
<executions>
194194
<execution>
195195
<id>pre-unit-test</id>
@@ -270,7 +270,7 @@
270270
<!-- Compile Phase -->
271271
<plugin>
272272
<artifactId>maven-compiler-plugin</artifactId>
273-
<version>3.13.0</version>
273+
<version>3.14.0</version>
274274
<configuration>
275275
<source>1.8</source>
276276
<target>1.8</target>
@@ -337,7 +337,7 @@
337337
<!-- Verify Phase -->
338338
<plugin>
339339
<artifactId>maven-failsafe-plugin</artifactId>
340-
<version>3.5.2</version>
340+
<version>3.5.3</version>
341341
<executions>
342342
<execution>
343343
<goals>
@@ -385,7 +385,7 @@
385385
<dependency>
386386
<groupId>com.google.cloud</groupId>
387387
<artifactId>libraries-bom</artifactId>
388-
<version>26.53.0</version>
388+
<version>26.59.0</version>
389389
<type>pom</type>
390390
<scope>import</scope>
391391
</dependency>
@@ -431,7 +431,7 @@
431431
<dependency>
432432
<groupId>org.slf4j</groupId>
433433
<artifactId>slf4j-api</artifactId>
434-
<version>2.0.16</version>
434+
<version>2.0.17</version>
435435
</dependency>
436436
<dependency>
437437
<groupId>io.netty</groupId>

src/main/java/com/google/firebase/messaging/AndroidNotification.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,9 @@ public class AndroidNotification {
112112
@Key("notification_count")
113113
private final Integer notificationCount;
114114

115+
@Key("proxy")
116+
private final String proxy;
117+
115118
private static final Map<Priority, String> PRIORITY_MAP =
116119
ImmutableMap.<Priority, String>builder()
117120
.put(Priority.MIN, "PRIORITY_MIN")
@@ -179,6 +182,11 @@ private AndroidNotification(Builder builder) {
179182
checkArgument(builder.notificationCount >= 0,
180183
"notificationCount if specified must be zero or positive valued");
181184
}
185+
if (builder.proxy != null) {
186+
this.proxy = builder.proxy.name();
187+
} else {
188+
this.proxy = null;
189+
}
182190
this.notificationCount = builder.notificationCount;
183191
}
184192

@@ -194,13 +202,19 @@ public String toString() {
194202
return PRIORITY_MAP.get(this);
195203
}
196204
}
197-
205+
198206
public enum Visibility {
199207
PRIVATE,
200208
PUBLIC,
201209
SECRET,
202210
}
203211

212+
public enum Proxy {
213+
ALLOW,
214+
DENY,
215+
IF_PRIORITY_LOWERED
216+
}
217+
204218
/**
205219
* Creates a new {@link AndroidNotification.Builder}.
206220
*
@@ -237,6 +251,7 @@ public static class Builder {
237251
private LightSettings lightSettings;
238252
private Boolean defaultLightSettings;
239253
private Visibility visibility;
254+
private Proxy proxy;
240255

241256
private Builder() {}
242257

@@ -602,6 +617,18 @@ public Builder setNotificationCount(int notificationCount) {
602617
return this;
603618
}
604619

620+
/**
621+
* Sets the proxy of this notification.
622+
*
623+
* @param proxy The proxy value, one of the values in {ALLOW, DENY, IF_PRIORITY_LOWERED}
624+
*
625+
* @return This builder.
626+
*/
627+
public Builder setProxy(Proxy proxy) {
628+
this.proxy = proxy;
629+
return this;
630+
}
631+
605632
/**
606633
* Creates a new {@link AndroidNotification} instance from the parameters set on this builder.
607634
*

src/main/java/com/google/firebase/messaging/ApnsConfig.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ public class ApnsConfig {
4141
@Key("fcm_options")
4242
private final ApnsFcmOptions fcmOptions;
4343

44+
@Key("live_activity_token")
45+
private final String liveActivityToken;
46+
4447
private ApnsConfig(Builder builder) {
4548
checkArgument(builder.aps != null, "aps must be specified");
4649
checkArgument(!builder.customData.containsKey("aps"),
@@ -51,6 +54,7 @@ private ApnsConfig(Builder builder) {
5154
.put("aps", builder.aps.getFields())
5255
.build();
5356
this.fcmOptions = builder.fcmOptions;
57+
this.liveActivityToken = builder.liveActivityToken;
5458
}
5559

5660
/**
@@ -68,6 +72,7 @@ public static class Builder {
6872
private final Map<String, Object> customData = new HashMap<>();
6973
private Aps aps;
7074
private ApnsFcmOptions fcmOptions;
75+
private String liveActivityToken;
7176

7277
private Builder() {}
7378

@@ -137,6 +142,17 @@ public Builder setFcmOptions(ApnsFcmOptions apnsFcmOptions) {
137142
return this;
138143
}
139144

145+
/**
146+
* Sets the Live Activity token.
147+
*
148+
* @param liveActivityToken Live Activity token.
149+
* @return This builder.
150+
*/
151+
public Builder setLiveActivityToken(String liveActivityToken) {
152+
this.liveActivityToken = liveActivityToken;
153+
return this;
154+
}
155+
140156
/**
141157
* Creates a new {@link ApnsConfig} instance from the parameters set on this builder.
142158
*

src/test/java/com/google/firebase/messaging/FirebaseMessagingIT.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ public void testSend() throws Exception {
6363
.setBody("Body")
6464
.build())
6565
.build())
66+
.setLiveActivityToken("integration-test-live-activity-token")
6667
.build())
6768
.setWebpushConfig(WebpushConfig.builder()
6869
.putHeader("X-Custom-Val", "Foo")

src/test/java/com/google/firebase/messaging/MessageTest.java

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,7 @@ public void testApnsMessageWithPayload() throws IOException {
411411
.putCustomData("cd1", "cd-v1")
412412
.putAllCustomData(ImmutableMap.<String, Object>of("cd2", "cd-v2", "cd3", true))
413413
.setAps(Aps.builder().build())
414+
.setLiveActivityToken("test-live-activity-token")
414415
.build())
415416
.setTopic("test-topic")
416417
.build();
@@ -421,10 +422,11 @@ public void testApnsMessageWithPayload() throws IOException {
421422
.put("cd3", true)
422423
.put("aps", ImmutableMap.of())
423424
.build();
424-
Map<String, Object> data = ImmutableMap.<String, Object>of(
425-
"headers", ImmutableMap.of("k1", "v1", "k2", "v2", "k3", "v3"),
426-
"payload", payload
427-
);
425+
Map<String, Object> data = ImmutableMap.<String, Object>builder()
426+
.put("headers", ImmutableMap.of("k1", "v1", "k2", "v2", "k3", "v3"))
427+
.put("payload", payload)
428+
.put("live_activity_token", "test-live-activity-token")
429+
.build();
428430
assertJsonEquals(ImmutableMap.of("topic", "test-topic", "apns", data), message);
429431
}
430432

@@ -442,6 +444,7 @@ public void testApnsMessageWithPayloadAndAps() throws IOException {
442444
.setSound("test-sound")
443445
.setThreadId("test-thread-id")
444446
.build())
447+
.setLiveActivityToken("test-live-activity-token-aps")
445448
.build())
446449
.setTopic("test-topic")
447450
.build();
@@ -459,7 +462,10 @@ public void testApnsMessageWithPayloadAndAps() throws IOException {
459462
assertJsonEquals(
460463
ImmutableMap.of(
461464
"topic", "test-topic",
462-
"apns", ImmutableMap.<String, Object>of("payload", payload)),
465+
"apns", ImmutableMap.<String, Object>builder()
466+
.put("payload", payload)
467+
.put("live_activity_token", "test-live-activity-token-aps")
468+
.build()),
463469
message);
464470

465471
message = Message.builder()
@@ -825,6 +831,7 @@ public void testImageInApnsNotification() throws IOException {
825831
.setApnsConfig(
826832
ApnsConfig.builder().setAps(Aps.builder().build())
827833
.setFcmOptions(ApnsFcmOptions.builder().setImage(TEST_IMAGE_URL_APNS).build())
834+
.setLiveActivityToken("test-live-activity-token-image")
828835
.build()).build();
829836

830837
ImmutableMap<String, Object> notification =
@@ -837,6 +844,7 @@ public void testImageInApnsNotification() throws IOException {
837844
ImmutableMap.<String, Object>builder()
838845
.put("fcm_options", ImmutableMap.of("image", TEST_IMAGE_URL_APNS))
839846
.put("payload", ImmutableMap.of("aps", ImmutableMap.of()))
847+
.put("live_activity_token", "test-live-activity-token-image")
840848
.build();
841849
ImmutableMap<String, Object> expected =
842850
ImmutableMap.<String, Object>builder()
@@ -847,6 +855,34 @@ public void testImageInApnsNotification() throws IOException {
847855
assertJsonEquals(expected, message);
848856
}
849857

858+
@Test
859+
public void testApnsMessageWithOnlyLiveActivityToken() throws IOException {
860+
Message message = Message.builder()
861+
.setApnsConfig(ApnsConfig.builder()
862+
.setAps(Aps.builder().build())
863+
.setLiveActivityToken("only-live-activity")
864+
.build())
865+
.setTopic("test-topic")
866+
.build();
867+
Map<String, Object> expectedApns = ImmutableMap.<String, Object>builder()
868+
.put("live_activity_token", "only-live-activity")
869+
.put("payload", ImmutableMap.of("aps", ImmutableMap.of()))
870+
.build();
871+
assertJsonEquals(ImmutableMap.of("topic", "test-topic", "apns", expectedApns), message);
872+
873+
// Test without live activity token
874+
message = Message.builder()
875+
.setApnsConfig(ApnsConfig.builder()
876+
.setAps(Aps.builder().build())
877+
.build())
878+
.setTopic("test-topic")
879+
.build();
880+
expectedApns = ImmutableMap.<String, Object>builder()
881+
.put("payload", ImmutableMap.of("aps", ImmutableMap.of()))
882+
.build();
883+
assertJsonEquals(ImmutableMap.of("topic", "test-topic", "apns", expectedApns), message);
884+
}
885+
850886
@Test
851887
public void testInvalidColorInAndroidNotificationLightSettings() {
852888
try {
@@ -890,6 +926,7 @@ public void testExtendedAndroidNotificationParameters() throws IOException {
890926
.setDefaultLightSettings(false)
891927
.setVisibility(AndroidNotification.Visibility.PUBLIC)
892928
.setNotificationCount(10)
929+
.setProxy(AndroidNotification.Proxy.DENY)
893930
.build())
894931
.build())
895932
.setTopic("test-topic")
@@ -923,6 +960,7 @@ public void testExtendedAndroidNotificationParameters() throws IOException {
923960
.put("default_light_settings", false)
924961
.put("visibility", "public")
925962
.put("notification_count", new BigDecimal(10))
963+
.put("proxy", "DENY")
926964
.build())
927965
.build();
928966
assertJsonEquals(ImmutableMap.of(

0 commit comments

Comments
 (0)