Skip to content

Commit 542abf1

Browse files
jonsimantova-maurice
authored andcommitted
Add Firebase C++/Unity user agent fields to Firebase Android user agent via
GlobalLibraryVersionRegistrar. There is currently no way for us to obtain the other user agent fields (as we do on iOS), so this is one-way only, C++/Unity pushing fields to Android. PiperOrigin-RevId: 243655961
1 parent 31d79e9 commit 542abf1

File tree

1 file changed

+47
-2
lines changed

1 file changed

+47
-2
lines changed

app/src/app_android.cc

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,15 @@
1414
* limitations under the License.
1515
*/
1616

17-
#include "app/src/include/firebase/app.h"
18-
1917
#include <jni.h>
2018
#include <string.h>
19+
2120
#include <string>
2221

2322
#include "app/src/app_common.h"
2423
#include "app/src/assert.h"
2524
#include "app/src/google_play_services/availability_android.h"
25+
#include "app/src/include/firebase/app.h"
2626
#include "app/src/include/firebase/version.h"
2727
#include "app/src/log.h"
2828
#include "app/src/util.h"
@@ -117,6 +117,26 @@ METHOD_LOOKUP_DEFINITION(options,
117117
"com/google/firebase/FirebaseOptions",
118118
FIREBASE_OPTIONS_METHODS)
119119

120+
// clang-format off
121+
#define GLOBAL_LIBRARY_VERSION_REGISTAR_METHODS(X) \
122+
X(GetInstance, "getInstance", \
123+
"()Lcom/google/firebase/platforminfo/GlobalLibraryVersionRegistrar;", \
124+
util::kMethodTypeStatic), \
125+
X(RegisterVersion, "registerVersion", \
126+
"(Ljava/lang/String;Ljava/lang/String;)V", \
127+
util::kMethodTypeInstance), \
128+
X(GetRegisteredVersions, "getRegisteredVersions", "()Ljava/util/Set;", \
129+
util::kMethodTypeInstance)
130+
// clang-format on
131+
132+
METHOD_LOOKUP_DECLARATION(version_registrar,
133+
GLOBAL_LIBRARY_VERSION_REGISTAR_METHODS)
134+
METHOD_LOOKUP_DEFINITION(
135+
version_registrar,
136+
PROGUARD_KEEP_CLASS
137+
"com/google/firebase/platforminfo/GlobalLibraryVersionRegistrar",
138+
GLOBAL_LIBRARY_VERSION_REGISTAR_METHODS)
139+
120140
const char* kDefaultAppName = "__FIRAPP_DEFAULT";
121141

122142
namespace {
@@ -137,6 +157,7 @@ bool CacheMethods(JNIEnv* env, jobject activity) {
137157
if (!(app::CacheMethodIds(env, activity) &&
138158
options_builder::CacheMethodIds(env, activity) &&
139159
options::CacheMethodIds(env, activity) &&
160+
version_registrar::CacheMethodIds(env, activity) &&
140161
google_play_services::Initialize(env, activity))) {
141162
ReleaseClasses(env);
142163
return false;
@@ -152,6 +173,7 @@ void ReleaseClasses(JNIEnv* env) {
152173
app::ReleaseClass(env);
153174
options_builder::ReleaseClass(env);
154175
options::ReleaseClass(env);
176+
version_registrar::ReleaseClass(env);
155177
google_play_services::Terminate(env);
156178
util::Terminate(env);
157179
}
@@ -410,7 +432,30 @@ App* App::GetInstance(const char* name) {
410432

411433
JNIEnv* App::GetJNIEnv() const { return util::GetThreadsafeJNIEnv(java_vm()); }
412434

435+
static void RegisterLibraryWithVersionRegistrar(JNIEnv* env,
436+
const char* library,
437+
const char* version) {
438+
jobject registrar = env->CallStaticObjectMethod(
439+
version_registrar::GetClass(),
440+
version_registrar::GetMethodId(version_registrar::kGetInstance));
441+
util::CheckAndClearJniExceptions(env);
442+
FIREBASE_ASSERT(registrar != nullptr);
443+
444+
jstring library_string = env->NewStringUTF(library);
445+
jstring version_string = env->NewStringUTF(version);
446+
env->CallVoidMethod(
447+
registrar,
448+
version_registrar::GetMethodId(version_registrar::kRegisterVersion),
449+
library_string, version_string);
450+
util::CheckAndClearJniExceptions(env);
451+
env->DeleteLocalRef(version_string);
452+
env->DeleteLocalRef(library_string);
453+
env->DeleteLocalRef(registrar);
454+
}
455+
413456
void App::RegisterLibrary(const char* library, const char* version) {
457+
RegisterLibraryWithVersionRegistrar(util::GetJNIEnvFromApp(), library,
458+
version);
414459
app_common::RegisterLibrary(library, version);
415460
}
416461

0 commit comments

Comments
 (0)