Skip to content

Commit

Permalink
Add InitiateOnDeviceConversion method to Analytics (firebase#961)
Browse files Browse the repository at this point in the history
* Add InitiateOnDeviceConversion to c++ sdk

* Added release notes
  • Loading branch information
AlmostMatt authored May 30, 2022
1 parent 5c42ab6 commit 533a317
Show file tree
Hide file tree
Showing 9 changed files with 60 additions and 1 deletion.
3 changes: 3 additions & 0 deletions analytics/integration_test/src/integration_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,9 @@ TEST_F(FirebaseAnalyticsTest, TestSetProperties) {
firebase::analytics::kUserPropertySignUpMethod, "Google");
// Set the user ID.
firebase::analytics::SetUserId("my_integration_test_user");
// Initiate on-device conversion measurement.
firebase::analytics::InitiateOnDeviceConversionMeasurementWithEmailAddress(
"[email protected]");
}

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 @@ -264,6 +264,16 @@ void LogEvent(const char* name, const Parameter* parameters,
});
}

/// Initiates on-device conversion measurement given a user email address on iOS
/// (no-op on Android). On iOS, requires dependency
/// GoogleAppMeasurementOnDeviceConversion to be linked in, otherwise it is a
/// no-op.
void InitiateOnDeviceConversionMeasurementWithEmailAddress(
const char* email_address) {
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
9 changes: 9 additions & 0 deletions analytics/src/analytics_ios.mm
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

#import <Foundation/Foundation.h>

#import "FIRAnalytics+OnDevice.h"
#import "FIRAnalytics.h"

#include "analytics/src/include/firebase/analytics.h"
Expand Down Expand Up @@ -222,6 +223,14 @@ void LogEvent(const char* name, const Parameter* parameters, size_t number_of_pa
[FIRAnalytics logEventWithName:@(name) parameters:parameters_dict];
}

/// Initiates on-device conversion measurement given a user email address on iOS (no-op on
/// Android). On iOS, requires dependency GoogleAppMeasurementOnDeviceConversion to be linked
/// in, otherwise it is a no-op.
void InitiateOnDeviceConversionMeasurementWithEmailAddress(const char* email_address) {
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
[FIRAnalytics initiateOnDeviceConversionMeasurementWithEmailAddress:@(email_address)];
}

// 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 @@ -92,6 +92,15 @@ void LogEvent(const char* /*name*/, const Parameter* /*parameters*/,
FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized());
}

/// Initiates on-device conversion measurement given a user email address on iOS
/// (no-op on Android). On iOS, requires dependency
/// GoogleAppMeasurementOnDeviceConversion to be linked in, otherwise it is a
/// no-op.
void InitiateOnDeviceConversionMeasurementWithEmailAddress(
const char* email_address) {
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: 10 additions & 1 deletion analytics/src/include/firebase/analytics.h
Original file line number Diff line number Diff line change
Expand Up @@ -433,6 +433,7 @@ void LogEvent(const char* name);
// in the C# code.
%csmethodmodifiers LogEvent "public unsafe"
#endif // SWIG
// clang-format on

/// @brief Log an event with associated parameters.
///
Expand All @@ -456,7 +457,15 @@ void LogEvent(const char* name);
/// array.
void LogEvent(const char* name, const Parameter* parameters,
size_t number_of_parameters);
// clang-format on

/// Initiates on-device conversion measurement given a user email address on iOS
/// (no-op on Android). On iOS, requires dependency
/// GoogleAppMeasurementOnDeviceConversion to be linked in, otherwise it is a
/// no-op.
/// @param[in] email_address User email address. Include a domain name for all
/// email addresses (e.g. gmail.com or hotmail.co.jp).
void InitiateOnDeviceConversionMeasurementWithEmailAddress(
const char* email_address);

/// @brief Set a user property to the given value.
///
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 @@ -21,6 +21,8 @@
+ (void)logEventWithName:(nonnull NSString *)name
parameters:(nullable NSDictionary<NSString *, id> *)parameters;

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

+ (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 @@ -55,6 +55,11 @@ + (void)logEventWithName:(nonnull NSString *)name
}
}

+ (void)initiateOnDeviceConversionMeasurementWithEmailAddress:(nonnull NSString *)emailAddress {
FakeReporter->AddReport("+[FIRAnalytics initiateOnDeviceConversionMeasurementWithEmailAddress:]",
{ [emailAddress 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 @@ -222,6 +222,16 @@ TEST_F(AnalyticsTest, TestLogEventParameters) {
LogEvent("my_event", parameters, sizeof(parameters) / sizeof(parameters[0]));
}

TEST_F(AnalyticsTest,
TestInitiateOnDeviceConversionMeasurementWithEmailAddress) {
// InitiateOnDeviceConversionMeasurementWithEmailAddress is no-op on Android
AddExpectationApple(
"+[FIRAnalytics initiateOnDeviceConversionMeasurementWithEmailAddress:]",
{"my_email"});

InitiateOnDeviceConversionMeasurementWithEmailAddress("my_email");
}

TEST_F(AnalyticsTest, TestSetUserProperty) {
AddExpectationAndroid("FirebaseAnalytics.setUserProperty",
{"my_property", "my_value"});
Expand Down
2 changes: 2 additions & 0 deletions release_build_files/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -605,6 +605,8 @@ code.
only using AdMob, Analytics, Remote Config, or Messaging.
- Functions: Add a new method `GetHttpsCallableFromURL`, to create callables
with URLs other than cloudfunctions.net.
- Analytics (iOS): Added InitiateOnDeviceConversionMeasurementWithEmail function to facilitate the
[on-device conversion measurement](https://support.google.com/google-ads/answer/12119136) API.

### 9.0.0
- Changes
Expand Down

0 comments on commit 533a317

Please sign in to comment.