Skip to content

Commit fdbc752

Browse files
authored
Add heartbeat to fis sdk (#1037)
* add tests * update api * installations
1 parent 3adccda commit fdbc752

File tree

5 files changed

+49
-8
lines changed

5 files changed

+49
-8
lines changed

firebase-installations/api.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ package com.google.firebase.installations.local {
7979
package com.google.firebase.installations.remote {
8080

8181
public class FirebaseInstallationServiceClient {
82-
ctor public FirebaseInstallationServiceClient(@NonNull Context);
82+
ctor public FirebaseInstallationServiceClient(@NonNull Context, @Nullable UserAgentPublisher, @Nullable HeartBeatInfo);
8383
method @NonNull public com.google.firebase.installations.remote.InstallationResponse createFirebaseInstallation(@NonNull String, @NonNull String, @NonNull String, @NonNull String);
8484
method @NonNull public void deleteFirebaseInstallation(@NonNull String, @NonNull String, @NonNull String, @NonNull String);
8585
method @NonNull public com.google.firebase.installations.remote.TokenResult generateAuthToken(@NonNull String, @NonNull String, @NonNull String, @NonNull String);

firebase-installations/src/main/java/com/google/firebase/installations/FirebaseInstallations.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import androidx.annotation.GuardedBy;
1818
import androidx.annotation.NonNull;
19+
import androidx.annotation.Nullable;
1920
import androidx.annotation.VisibleForTesting;
2021
import com.google.android.gms.common.internal.Preconditions;
2122
import com.google.android.gms.common.util.DefaultClock;
@@ -24,6 +25,7 @@
2425
import com.google.android.gms.tasks.Tasks;
2526
import com.google.firebase.FirebaseApp;
2627
import com.google.firebase.FirebaseException;
28+
import com.google.firebase.heartbeatinfo.HeartBeatInfo;
2729
import com.google.firebase.installations.local.IidStore;
2830
import com.google.firebase.installations.local.PersistedInstallation;
2931
import com.google.firebase.installations.local.PersistedInstallation.RegistrationStatus;
@@ -32,6 +34,7 @@
3234
import com.google.firebase.installations.remote.InstallationResponse;
3335
import com.google.firebase.installations.remote.InstallationResponse.ResponseCode;
3436
import com.google.firebase.installations.remote.TokenResult;
37+
import com.google.firebase.platforminfo.UserAgentPublisher;
3538
import java.util.ArrayList;
3639
import java.util.Iterator;
3740
import java.util.List;
@@ -68,11 +71,15 @@ public class FirebaseInstallations implements FirebaseInstallationsApi {
6871
private final List<StateListener> listeners = new ArrayList<>();
6972

7073
/** package private constructor. */
71-
FirebaseInstallations(FirebaseApp firebaseApp) {
74+
FirebaseInstallations(
75+
FirebaseApp firebaseApp,
76+
@Nullable UserAgentPublisher publisher,
77+
@Nullable HeartBeatInfo heartbeatInfo) {
7278
this(
7379
new ThreadPoolExecutor(0, 1, 30L, TimeUnit.SECONDS, new LinkedBlockingQueue<>()),
7480
firebaseApp,
75-
new FirebaseInstallationServiceClient(firebaseApp.getApplicationContext()),
81+
new FirebaseInstallationServiceClient(
82+
firebaseApp.getApplicationContext(), publisher, heartbeatInfo),
7683
new PersistedInstallation(firebaseApp),
7784
new Utils(DefaultClock.getInstance()),
7885
new IidStore());

firebase-installations/src/main/java/com/google/firebase/installations/FirebaseInstallationsRegistrar.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
import com.google.firebase.components.Component;
2020
import com.google.firebase.components.ComponentRegistrar;
2121
import com.google.firebase.components.Dependency;
22+
import com.google.firebase.heartbeatinfo.HeartBeatInfo;
2223
import com.google.firebase.platforminfo.LibraryVersionComponent;
24+
import com.google.firebase.platforminfo.UserAgentPublisher;
2325
import java.util.Arrays;
2426
import java.util.List;
2527

@@ -32,7 +34,14 @@ public List<Component<?>> getComponents() {
3234
return Arrays.asList(
3335
Component.builder(FirebaseInstallationsApi.class)
3436
.add(Dependency.required(FirebaseApp.class))
35-
.factory(c -> new FirebaseInstallations(c.get(FirebaseApp.class)))
37+
.add(Dependency.required(HeartBeatInfo.class))
38+
.add(Dependency.required(UserAgentPublisher.class))
39+
.factory(
40+
c ->
41+
new FirebaseInstallations(
42+
c.get(FirebaseApp.class),
43+
c.get(UserAgentPublisher.class),
44+
c.get(HeartBeatInfo.class)))
3645
.build(),
3746
LibraryVersionComponent.create("fire-installations", BuildConfig.VERSION_NAME));
3847
}

firebase-installations/src/main/java/com/google/firebase/installations/remote/FirebaseInstallationServiceClient.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,15 @@
2222
import android.util.JsonReader;
2323
import android.util.Log;
2424
import androidx.annotation.NonNull;
25+
import androidx.annotation.Nullable;
2526
import com.google.android.gms.common.util.AndroidUtilsLight;
2627
import com.google.android.gms.common.util.Hex;
2728
import com.google.android.gms.common.util.VisibleForTesting;
2829
import com.google.firebase.FirebaseException;
30+
import com.google.firebase.heartbeatinfo.HeartBeatInfo;
31+
import com.google.firebase.heartbeatinfo.HeartBeatInfo.HeartBeat;
2932
import com.google.firebase.installations.remote.InstallationResponse.ResponseCode;
33+
import com.google.firebase.platforminfo.UserAgentPublisher;
3034
import java.io.BufferedReader;
3135
import java.io.IOException;
3236
import java.io.InputStreamReader;
@@ -55,6 +59,12 @@ public class FirebaseInstallationServiceClient {
5559
private static final String CONTENT_ENCODING_HEADER_KEY = "Content-Encoding";
5660
private static final String GZIP_CONTENT_ENCODING = "gzip";
5761

62+
/** Heartbeat tag for firebase installations. */
63+
private static final String FIREBASE_INSTALLATIONS_ID_HEARTBEAT_TAG = "fire-installations-id";
64+
65+
private static final String HEART_BEAT_HEADER = "x-firebase-client-log-type";
66+
private static final String USER_AGENT_HEADER = "x-firebase-client";
67+
5868
private static final String INTERNAL_SERVER_ERROR_MESSAGE = "There was an internal server error.";
5969
private static final String NETWORK_ERROR_MESSAGE = "The server returned an unexpected error: %s";
6070

@@ -72,9 +82,16 @@ public class FirebaseInstallationServiceClient {
7282
static final String PARSING_EXPIRATION_TIME_ERROR_MESSAGE = "Invalid Expiration Timestamp.";
7383

7484
private final Context context;
85+
private final UserAgentPublisher userAgentPublisher;
86+
private final HeartBeatInfo heartbeatInfo;
7587

76-
public FirebaseInstallationServiceClient(@NonNull Context context) {
88+
public FirebaseInstallationServiceClient(
89+
@NonNull Context context,
90+
@Nullable UserAgentPublisher publisher,
91+
@Nullable HeartBeatInfo heartBeatInfo) {
7792
this.context = context;
93+
this.userAgentPublisher = publisher;
94+
this.heartbeatInfo = heartBeatInfo;
7895
}
7996

8097
/**
@@ -261,6 +278,14 @@ private HttpsURLConnection openHttpsURLConnection(URL url) throws IOException {
261278
httpsURLConnection.addRequestProperty(ACCEPT_HEADER_KEY, JSON_CONTENT_TYPE);
262279
httpsURLConnection.addRequestProperty(CONTENT_ENCODING_HEADER_KEY, GZIP_CONTENT_ENCODING);
263280
httpsURLConnection.addRequestProperty(X_ANDROID_PACKAGE_HEADER_KEY, context.getPackageName());
281+
if (heartbeatInfo != null && userAgentPublisher != null) {
282+
HeartBeat heartbeat = heartbeatInfo.getHeartBeatCode(FIREBASE_INSTALLATIONS_ID_HEARTBEAT_TAG);
283+
if (heartbeat != HeartBeat.NONE) {
284+
httpsURLConnection.addRequestProperty(USER_AGENT_HEADER, userAgentPublisher.getUserAgent());
285+
httpsURLConnection.addRequestProperty(
286+
HEART_BEAT_HEADER, Integer.toString(heartbeat.getCode()));
287+
}
288+
}
264289
httpsURLConnection.addRequestProperty(
265290
X_ANDROID_CERT_HEADER_KEY, getFingerprintHashForPackage());
266291
return httpsURLConnection;

tools/measurement/apksize/src/inappmessagingdisplay/java/com.google.apksize/InAppMessagingDisplay.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,16 @@
1616

1717
import android.app.Activity;
1818
import android.content.Context;
19+
import androidx.annotation.NonNull;
1920
import com.google.android.gms.tasks.Task;
2021
import com.google.android.gms.tasks.TaskCompletionSource;
2122
import com.google.firebase.inappmessaging.FirebaseInAppMessagingDisplayCallbacks;
23+
import com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay;
2224
import com.google.firebase.inappmessaging.model.Action;
2325
import com.google.firebase.inappmessaging.model.CampaignMetadata;
26+
import com.google.firebase.inappmessaging.model.InAppMessage;
2427
import com.google.firebase.inappmessaging.model.ModalMessage;
2528
import com.google.firebase.inappmessaging.model.Text;
26-
import com.google.firebase.inappmessaging.display.FirebaseInAppMessagingDisplay;
27-
import androidx.annotation.NonNull;
28-
import com.google.firebase.inappmessaging.model.InAppMessage;
2929

3030
public class InAppMessagingDisplay implements SampleCode {
3131
private static final String SAMPLE_TEXT = "My sample text";

0 commit comments

Comments
 (0)