From 56937f8f451fa06fcc1368e469759ca3319a512b Mon Sep 17 00:00:00 2001 From: davinci9196 Date: Tue, 6 Feb 2024 11:54:00 +0800 Subject: [PATCH] fixed the exception login issue caused by the AppInstanceId being null --- .../gms/measurement/internal/AppMetadata.java | 79 +++++++++++++++ .../gms/measurement/MeasurementService.kt | 95 +++++++++++++++++++ 2 files changed, 174 insertions(+) create mode 100644 play-services-api/src/main/java/com/google/android/gms/measurement/internal/AppMetadata.java create mode 100644 play-services-core/src/main/kotlin/org/microg/gms/measurement/MeasurementService.kt diff --git a/play-services-api/src/main/java/com/google/android/gms/measurement/internal/AppMetadata.java b/play-services-api/src/main/java/com/google/android/gms/measurement/internal/AppMetadata.java new file mode 100644 index 00000000..d3726249 --- /dev/null +++ b/play-services-api/src/main/java/com/google/android/gms/measurement/internal/AppMetadata.java @@ -0,0 +1,79 @@ +/* + * SPDX-FileCopyrightText: 2020, microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package com.google.android.gms.measurement.internal; + +import org.microg.safeparcel.AutoSafeParcelable; + +import java.util.List; + +public class AppMetadata extends AutoSafeParcelable { + @Field(2) + public String packageName; + @Field(3) + public String googleAppId; + @Field(4) + public String versionName; + @Field(5) + public String installerPackageName; + @Field(6) + private long googleVersion; + @Field(7) + private long devCertHash; + @Field(8) + private String healthMonitor; + @Field(9) + private boolean measurementEnabled = true; + @Field(10) + private boolean firstOpen; + @Field(11) + public long versionCode = Integer.MIN_VALUE; + @Field(12) + public String firebaseInstanceId; + @Field(13) + private long androidId; + @Field(14) + private long instantiationTime; + @Field(15) + public int appType; + @Field(16) + private boolean adIdReportingEnabled; + @Field(17) + public boolean ssaidCollectionEnabled = true; + @Field(18) + public boolean deferredAnalyticsCollection; + @Field(19) + public String admobAppId; + @Field(21) + public Boolean allowAdPersonalization; + @Field(22) + private long dynamiteVersion; + @Field(23) + public List safelistedEvents; + @Field(24) + public String gaAppId; + @Field(25) + private String consentSettings; + @Field(26) + public String ephemeralAppInstanceId; + @Field(27) + private String sessionStitchingToken; + @Field(28) + private boolean sgtmUploadEnabled; + @Field(29) + private long targetOsVersion; + @Field(30) + private int consentSource; + @Field(31) + private String dmaConsent; + @Field(32) + private int adServicesVersion; + + public String toString() { + return "AppMetadata[" + packageName + "]"; + } + + public static final Creator CREATOR = new AutoCreator<>(AppMetadata.class); +} diff --git a/play-services-core/src/main/kotlin/org/microg/gms/measurement/MeasurementService.kt b/play-services-core/src/main/kotlin/org/microg/gms/measurement/MeasurementService.kt new file mode 100644 index 00000000..fa79cf9a --- /dev/null +++ b/play-services-core/src/main/kotlin/org/microg/gms/measurement/MeasurementService.kt @@ -0,0 +1,95 @@ +/* + * SPDX-FileCopyrightText: 2022 microG Project Team + * SPDX-License-Identifier: Apache-2.0 + */ + +package org.microg.gms.measurement + +import android.os.Bundle +import android.os.Parcel +import android.util.Log +import com.google.android.gms.common.api.CommonStatusCodes +import com.google.android.gms.common.internal.GetServiceRequest +import com.google.android.gms.common.internal.IGmsCallbacks +import com.google.android.gms.measurement.internal.* +import org.microg.gms.BaseService +import org.microg.gms.common.GmsService +import org.microg.gms.utils.warnOnTransactionIssues + +private const val TAG = "MeasurementService" + +class MeasurementService : BaseService(TAG, GmsService.MEASUREMENT) { + override fun handleServiceRequest(callback: IGmsCallbacks, request: GetServiceRequest, service: GmsService) { + callback.onPostInitComplete(CommonStatusCodes.SUCCESS, MeasurementServiceImpl(), Bundle()) + } +} + +class MeasurementServiceImpl : IMeasurementService.Stub() { + override fun sendEvent(event: EventParcel, app: AppMetadata) { + Log.d(TAG, "sendEvent($event) for $app") + } + + override fun sendUserProperty(attribute: UserAttributeParcel?, app: AppMetadata) { + Log.d(TAG, "sendUserProperty($attribute) for $app") + } + + override fun sendAppLaunch(app: AppMetadata?) { + Log.d(TAG, "sendAppLaunch() for $app") + } + + override fun sendMeasurementEnabled(app: AppMetadata) { + Log.d(TAG, "sendMeasurementEnabled() for $app") + } + + override fun getAllUserProperties(app: AppMetadata?, includeInternal: Boolean): List { + Log.d(TAG, "getAllUserProperties($includeInternal) for $app") + return emptyList() + } + + override fun sendCurrentScreen(id: Long, name: String?, referrer: String?, packageName: String?) { + Log.d(TAG, "sendCurrentScreen($id, $name, $referrer, $packageName)") + } + + override fun getAppInstanceId(app: AppMetadata): String? { + Log.d(TAG, "getAppInstanceId() for $app") + return app.ephemeralAppInstanceId ?: app.firebaseInstanceId + } + + override fun sendConditionalUserProperty(property: ConditionalUserPropertyParcel, app: AppMetadata) { + Log.d(TAG, "sendConditionalUserProperty($property) for $app") + } + + override fun getUserProperties(origin: String?, propertyNamePrefix: String?, includeInternal: Boolean, app: AppMetadata?): List { + Log.d(TAG, "getUserProperties($origin, $propertyNamePrefix, $includeInternal) for $app") + return emptyList() + } + + override fun getUserPropertiesAs(packageName: String?, origin: String?, propertyNamePrefix: String?, includeInternal: Boolean): List { + Log.d(TAG, "getUserPropertiesAs($packageName, $origin, $propertyNamePrefix, $includeInternal)") + return emptyList() + } + + override fun getConditionalUserProperties(origin: String?, propertyNamePrefix: String?, app: AppMetadata?): List { + Log.d(TAG, "getConditionalUserProperties($origin, $propertyNamePrefix) for $app") + return emptyList() + } + + override fun getConditionalUserPropertiesAs(packageName: String?, origin: String?, propertyNamePrefix: String?): List { + Log.d(TAG, "getConditionalUserPropertiesAs($packageName, $origin, $propertyNamePrefix)") + return emptyList() + } + + override fun reset(app: AppMetadata) { + Log.d(TAG, "reset() for $app") + } + + override fun sendDefaultEventParameters(params: Bundle, app: AppMetadata) { + Log.d(TAG, "sendDefaultEventParameters($params) for $app") + } + + override fun sendConsentSettings(app: AppMetadata) { + Log.d(TAG, "sendConsentSettings() for $app") + } + + override fun onTransact(code: Int, data: Parcel, reply: Parcel?, flags: Int): Boolean = warnOnTransactionIssues(code, reply, flags, TAG) { super.onTransact(code, data, reply, flags) } +}