Skip to content

Add Analytics function for on-device conversion #1429

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Aug 21, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions analytics/integration_test/src/integration_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,8 @@ TEST_F(FirebaseAnalyticsTest, TestSetProperties) {
// Initiate on-device conversion measurement.
firebase::analytics::InitiateOnDeviceConversionMeasurementWithEmailAddress(
"my_email@site.com");
firebase::analytics::InitiateOnDeviceConversionMeasurementWithPhoneNumber(
"+15551234567");
}

TEST_F(FirebaseAnalyticsTest, TestLogEvents) {
Expand Down
10 changes: 10 additions & 0 deletions analytics/src/analytics_android.cc
Original file line number Diff line number Diff line change
Expand Up @@ -411,6 +411,16 @@ void InitiateOnDeviceConversionMeasurementWithEmailAddress(
// No-op on Android
}

/// Initiates on-device conversion measurement given a phone number on iOS
/// (no-op on Android). On iOS, requires dependency
/// GoogleAppMeasurementOnDeviceConversion to be linked in, otherwise it is a
/// no-op.
void InitiateOnDeviceConversionMeasurementWithPhoneNumber(
const char* phone_number) {
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
// No-op on Android
}

// Set a user property to the given value.
void SetUserProperty(const char* name, const char* value) {
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
Expand Down
8 changes: 8 additions & 0 deletions analytics/src/analytics_ios.mm
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,14 @@ void InitiateOnDeviceConversionMeasurementWithEmailAddress(const char* email_add
[FIRAnalytics initiateOnDeviceConversionMeasurementWithEmailAddress:@(email_address)];
}

/// Initiates on-device conversion measurement given a phone number on iOS (no-op on
/// Android). On iOS, requires dependency GoogleAppMeasurementOnDeviceConversion to be linked
/// in, otherwise it is a no-op.
void InitiateOnDeviceConversionMeasurementWithPhoneNumber(const char* phone_number) {
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
[FIRAnalytics initiateOnDeviceConversionMeasurementWithPhoneNumber:@(phone_number)];
}

// Set a user property to the given value.
void SetUserProperty(const char* name, const char* value) {
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
Expand Down
9 changes: 9 additions & 0 deletions analytics/src/analytics_stub.cc
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,15 @@ void InitiateOnDeviceConversionMeasurementWithEmailAddress(
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
}

/// Initiates on-device conversion measurement given a phone number on iOS
/// (no-op on Android). On iOS, requires dependency
/// GoogleAppMeasurementOnDeviceConversion to be linked in, otherwise it is a
/// no-op.
void InitiateOnDeviceConversionMeasurementWithPhoneNumber(
const char* phone_number) {
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
}

// Set a user property to the given value.
void SetUserProperty(const char* /*name*/, const char* /*value*/) {
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
Expand Down
11 changes: 11 additions & 0 deletions analytics/src/include/firebase/analytics.h
Original file line number Diff line number Diff line change
Expand Up @@ -487,6 +487,17 @@ void LogEvent(const char* name, const Parameter* parameters,
void InitiateOnDeviceConversionMeasurementWithEmailAddress(
const char* email_address);

/// Initiates on-device conversion measurement given a phone number in E.164
/// format on iOS (no-op on Android). On iOS, requires dependency
/// GoogleAppMeasurementOnDeviceConversion to be linked in, otherwise it is a
/// no-op.
/// @param phone_number User phone number. Must be in E.164 format, which means
/// it must be
/// limited to a maximum of 15 digits and must include a plus sign (+) prefix
/// and country code with no dashes, parentheses, or spaces.
void InitiateOnDeviceConversionMeasurementWithPhoneNumber(
const char* phone_number);

/// @brief Set a user property to the given value.
///
/// Properties associated with a user allow a developer to segment users
Expand Down
2 changes: 2 additions & 0 deletions analytics/src_ios/fake/FIRAnalytics.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@

+ (void)initiateOnDeviceConversionMeasurementWithEmailAddress:(nonnull NSString *)emailAddress;

+ (void)InitiateOnDeviceConversionMeasurementWithPhoneNumber:(nonnull NSString *)phoneNumber;

+ (void)setUserPropertyString:(nullable NSString *)value forName:(nonnull NSString *)name;

+ (void)setUserID:(nullable NSString *)userID;
Expand Down
5 changes: 5 additions & 0 deletions analytics/src_ios/fake/FIRAnalytics.mm
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,11 @@ + (void)initiateOnDeviceConversionMeasurementWithEmailAddress:(nonnull NSString
{ [emailAddress UTF8String] });
}

+ (void)initiateOnDeviceConversionMeasurementWithPhoneNumber:(nonnull NSString *)phoneNumber {
FakeReporter->AddReport("+[FIRAnalytics initiateOnDeviceConversionMeasurementWithPhoneNumber:]",
{ [phoneNumber UTF8String] });
}

+ (void)setUserPropertyString:(nullable NSString *)value forName:(nonnull NSString *)name {
FakeReporter->AddReport("+[FIRAnalytics setUserPropertyString:forName:]",
{ [name UTF8String], value ? [value UTF8String] : "nil" });
Expand Down
10 changes: 10 additions & 0 deletions analytics/tests/analytics_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,16 @@ TEST_F(AnalyticsTest,
InitiateOnDeviceConversionMeasurementWithEmailAddress("my_email");
}

TEST_F(AnalyticsTest,
TestInitiateOnDeviceConversionMeasurementWithPhoneNumber) {
// InitiateOnDeviceConversionMeasurementWithPhoneNumber is no-op on Android
AddExpectationApple(
"+[FIRAnalytics initiateOnDeviceConversionMeasurementWithPhoneNumber:]",
{"+15551234567"});

InitiateOnDeviceConversionMeasurementWithPhoneNumber("+15551234567");
}

TEST_F(AnalyticsTest, TestSetUserProperty) {
AddExpectationAndroid("FirebaseAnalytics.setUserProperty",
{"my_property", "my_value"});
Expand Down
3 changes: 3 additions & 0 deletions release_build_files/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -629,6 +629,9 @@ code.
## Release Notes
### Next Release
- Changes
- Analytics (iOS): Added InitiateOnDeviceConversionMeasurementWithPhoneNumber
function to facilitate the [on-device conversion
measurement](https://support.google.com/google-ads/answer/12119136) API.
- Auth: Add Firebase Auth Emulator support. Set the environment variable
USE_AUTH_EMULATOR=yes (and optionally AUTH_EMULATOR_PORT, default 9099)
to connect to the local Firebase Auth Emulator.
Expand Down