From 5b7b324dc5dec3408a32ee124c194f521be81121 Mon Sep 17 00:00:00 2001 From: Jon Simantov Date: Wed, 5 Jun 2024 16:28:06 -0700 Subject: [PATCH 01/12] Add function header for hashed email address and phone number functions. --- analytics/src/include/firebase/analytics.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/analytics/src/include/firebase/analytics.h b/analytics/src/include/firebase/analytics.h index f171e6cf26..5ad780414b 100644 --- a/analytics/src/include/firebase/analytics.h +++ b/analytics/src/include/firebase/analytics.h @@ -503,6 +503,24 @@ void InitiateOnDeviceConversionMeasurementWithEmailAddress( void InitiateOnDeviceConversionMeasurementWithPhoneNumber( const char* phone_number); +/// Initiates on-device conversion measurement given a sha256-hashed user email address. +/// Requires dependency GoogleAppMeasurementOnDeviceConversion to be linked in, otherwise it is +/// a no-op. +/// @param hashedEmailAddress User email address as a UTF8-encoded string normalized and +/// hashed according to the instructions at +/// https://firebase.google.com/docs/tutorials/ads-ios-on-device-measurement/step-3. +void InitiateOnDeviceConversionMeasurementWithHashedEmailAddress( + std::vector &hashed_email_address); + +/// Initiates on-device conversion measurement given a sha256-hashed phone number in E.164 +/// format. Requires dependency GoogleAppMeasurementOnDeviceConversion to be linked in, +/// otherwise it is a no-op. +/// @param hashedPhoneNumber UTF8-encoded user phone number in E.164 format and then hashed +/// according to the instructions at +/// https://firebase.google.com/docs/tutorials/ads-ios-on-device-measurement/step-3. +void InitiateOnDeviceConversionMeasurementWithHashedPhoneNumber( + std::vector hashed_phone_number); + /// @brief Set a user property to the given value. /// /// Properties associated with a user allow a developer to segment users From 9cfc8e2b2fb2ce53f794dcd82ad3426e94c2082c Mon Sep 17 00:00:00 2001 From: Jon Simantov Date: Wed, 5 Jun 2024 16:28:35 -0700 Subject: [PATCH 02/12] Format code. --- analytics/src/include/firebase/analytics.h | 23 +++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/analytics/src/include/firebase/analytics.h b/analytics/src/include/firebase/analytics.h index 5ad780414b..d46a4579b9 100644 --- a/analytics/src/include/firebase/analytics.h +++ b/analytics/src/include/firebase/analytics.h @@ -503,20 +503,21 @@ void InitiateOnDeviceConversionMeasurementWithEmailAddress( void InitiateOnDeviceConversionMeasurementWithPhoneNumber( const char* phone_number); -/// Initiates on-device conversion measurement given a sha256-hashed user email address. -/// Requires dependency GoogleAppMeasurementOnDeviceConversion to be linked in, otherwise it is -/// a no-op. -/// @param hashedEmailAddress User email address as a UTF8-encoded string normalized and -/// hashed according to the instructions at +/// Initiates on-device conversion measurement given a sha256-hashed user email +/// address. Requires dependency GoogleAppMeasurementOnDeviceConversion to be +/// linked in, otherwise it is a no-op. +/// @param hashedEmailAddress User email address as a UTF8-encoded string +/// normalized and hashed according to the instructions at /// https://firebase.google.com/docs/tutorials/ads-ios-on-device-measurement/step-3. void InitiateOnDeviceConversionMeasurementWithHashedEmailAddress( - std::vector &hashed_email_address); + std::vector& hashed_email_address); -/// Initiates on-device conversion measurement given a sha256-hashed phone number in E.164 -/// format. Requires dependency GoogleAppMeasurementOnDeviceConversion to be linked in, -/// otherwise it is a no-op. -/// @param hashedPhoneNumber UTF8-encoded user phone number in E.164 format and then hashed -/// according to the instructions at +/// Initiates on-device conversion measurement given a sha256-hashed phone +/// number in E.164 format. Requires dependency +/// GoogleAppMeasurementOnDeviceConversion to be linked in, otherwise it is a +/// no-op. +/// @param hashedPhoneNumber UTF8-encoded user phone number in E.164 format and +/// then hashed according to the instructions at /// https://firebase.google.com/docs/tutorials/ads-ios-on-device-measurement/step-3. void InitiateOnDeviceConversionMeasurementWithHashedPhoneNumber( std::vector hashed_phone_number); From c33016be62577e77e347a7863dee6d40262fa6a6 Mon Sep 17 00:00:00 2001 From: Jon Simantov Date: Thu, 6 Jun 2024 11:33:44 -0700 Subject: [PATCH 03/12] Add integration test for hashed email/phone. Add stub. Fix header definition. --- .../integration_test/src/integration_test.cc | 18 ++++++++++++++++++ analytics/src/analytics_stub.cc | 10 ++++++++++ analytics/src/include/firebase/analytics.h | 2 +- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/analytics/integration_test/src/integration_test.cc b/analytics/integration_test/src/integration_test.cc index 7f7a244b05..f793374247 100644 --- a/analytics/integration_test/src/integration_test.cc +++ b/analytics/integration_test/src/integration_test.cc @@ -220,6 +220,24 @@ TEST_F(FirebaseAnalyticsTest, TestSetProperties) { "my_email@site.com"); firebase::analytics::InitiateOnDeviceConversionMeasurementWithPhoneNumber( "+15551234567"); + + std::vector hashed_email = { + // SHA256-encoded "example@example.com" + 0x31, 0xc5, 0x54, 0x3c, 0x17, 0x34, 0xd2, 0x5c, 0x72, 0x06, 0xf5, 0xfd, 0x59, + 0x15, 0x25, 0xd0, 0x29, 0x5b, 0xec, 0x6f, 0xe8, 0x4f, 0xf8, 0x2f, 0x94, 0x6a, + 0x34, 0xfe, 0x97, 0x0a, 0x1e, 0x66, + }; + + firebase::analytics::InitiateOnDeviceConversionMeasurementWithHashedEmailAddress(hashed_email); + + std::vector hashed_phone = { + // SHA256-encoded "+12345556789" + 0x12, 0x8c, 0x64, 0xfe, 0x24, 0x0f, 0x08, 0x75, 0xf5, 0x98, 0xc3, 0x48, 0x0e, + 0xb0, 0x38, 0xd2, 0xe6, 0xb0, 0x05, 0xd1, 0xa0, 0x57, 0xb6, 0x21, 0x4a, 0xc2, + 0x09, 0xf6, 0xe5, 0xc0, 0x68, 0x41, + }; + + firebase::analytics::InitiateOnDeviceConversionMeasurementWithHashedPhoneNumber(hashed_phone); } TEST_F(FirebaseAnalyticsTest, TestLogEvents) { diff --git a/analytics/src/analytics_stub.cc b/analytics/src/analytics_stub.cc index b207a76080..37c4b3520b 100644 --- a/analytics/src/analytics_stub.cc +++ b/analytics/src/analytics_stub.cc @@ -106,6 +106,11 @@ void InitiateOnDeviceConversionMeasurementWithEmailAddress( FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized()); } +void InitiateOnDeviceConversionMeasurementWithHashedEmailAddress( + std::vector email_address) { + 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 @@ -115,6 +120,11 @@ void InitiateOnDeviceConversionMeasurementWithPhoneNumber( FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized()); } +void InitiateOnDeviceConversionMeasurementWithHashedPhoneNumber( + std::vector phone_number_hash) { + 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()); diff --git a/analytics/src/include/firebase/analytics.h b/analytics/src/include/firebase/analytics.h index d46a4579b9..a1af6bc45f 100644 --- a/analytics/src/include/firebase/analytics.h +++ b/analytics/src/include/firebase/analytics.h @@ -510,7 +510,7 @@ void InitiateOnDeviceConversionMeasurementWithPhoneNumber( /// normalized and hashed according to the instructions at /// https://firebase.google.com/docs/tutorials/ads-ios-on-device-measurement/step-3. void InitiateOnDeviceConversionMeasurementWithHashedEmailAddress( - std::vector& hashed_email_address); + std::vector hashed_email_address); /// Initiates on-device conversion measurement given a sha256-hashed phone /// number in E.164 format. Requires dependency From cbb48a224019cd530aec51f1922740b9380f4868 Mon Sep 17 00:00:00 2001 From: Jon Simantov Date: Thu, 6 Jun 2024 12:04:44 -0700 Subject: [PATCH 04/12] Add missing header. --- analytics/src/include/firebase/analytics.h | 1 + 1 file changed, 1 insertion(+) diff --git a/analytics/src/include/firebase/analytics.h b/analytics/src/include/firebase/analytics.h index a1af6bc45f..ad3ecabb83 100644 --- a/analytics/src/include/firebase/analytics.h +++ b/analytics/src/include/firebase/analytics.h @@ -21,6 +21,7 @@ #include #include #include +#include #include "firebase/app.h" #include "firebase/future.h" From 5ef1ee66db4ece31d68d63bc05db8ca2f4f65177 Mon Sep 17 00:00:00 2001 From: Jon Simantov Date: Thu, 6 Jun 2024 12:04:51 -0700 Subject: [PATCH 05/12] Format code. --- .../integration_test/src/integration_test.cc | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/analytics/integration_test/src/integration_test.cc b/analytics/integration_test/src/integration_test.cc index f793374247..575ff30b82 100644 --- a/analytics/integration_test/src/integration_test.cc +++ b/analytics/integration_test/src/integration_test.cc @@ -222,22 +222,24 @@ TEST_F(FirebaseAnalyticsTest, TestSetProperties) { "+15551234567"); std::vector hashed_email = { - // SHA256-encoded "example@example.com" - 0x31, 0xc5, 0x54, 0x3c, 0x17, 0x34, 0xd2, 0x5c, 0x72, 0x06, 0xf5, 0xfd, 0x59, - 0x15, 0x25, 0xd0, 0x29, 0x5b, 0xec, 0x6f, 0xe8, 0x4f, 0xf8, 0x2f, 0x94, 0x6a, - 0x34, 0xfe, 0x97, 0x0a, 0x1e, 0x66, + // SHA256-encoded "example@example.com" + 0x31, 0xc5, 0x54, 0x3c, 0x17, 0x34, 0xd2, 0x5c, 0x72, 0x06, 0xf5, + 0xfd, 0x59, 0x15, 0x25, 0xd0, 0x29, 0x5b, 0xec, 0x6f, 0xe8, 0x4f, + 0xf8, 0x2f, 0x94, 0x6a, 0x34, 0xfe, 0x97, 0x0a, 0x1e, 0x66, }; - - firebase::analytics::InitiateOnDeviceConversionMeasurementWithHashedEmailAddress(hashed_email); + + firebase::analytics:: + InitiateOnDeviceConversionMeasurementWithHashedEmailAddress(hashed_email); std::vector hashed_phone = { - // SHA256-encoded "+12345556789" - 0x12, 0x8c, 0x64, 0xfe, 0x24, 0x0f, 0x08, 0x75, 0xf5, 0x98, 0xc3, 0x48, 0x0e, - 0xb0, 0x38, 0xd2, 0xe6, 0xb0, 0x05, 0xd1, 0xa0, 0x57, 0xb6, 0x21, 0x4a, 0xc2, - 0x09, 0xf6, 0xe5, 0xc0, 0x68, 0x41, + // SHA256-encoded "+12345556789" + 0x12, 0x8c, 0x64, 0xfe, 0x24, 0x0f, 0x08, 0x75, 0xf5, 0x98, 0xc3, + 0x48, 0x0e, 0xb0, 0x38, 0xd2, 0xe6, 0xb0, 0x05, 0xd1, 0xa0, 0x57, + 0xb6, 0x21, 0x4a, 0xc2, 0x09, 0xf6, 0xe5, 0xc0, 0x68, 0x41, }; - - firebase::analytics::InitiateOnDeviceConversionMeasurementWithHashedPhoneNumber(hashed_phone); + + firebase::analytics:: + InitiateOnDeviceConversionMeasurementWithHashedPhoneNumber(hashed_phone); } TEST_F(FirebaseAnalyticsTest, TestLogEvents) { From 7cc74b6e92ba957f60cd4c0babf18fea26a54591 Mon Sep 17 00:00:00 2001 From: Jon Simantov Date: Thu, 6 Jun 2024 12:08:42 -0700 Subject: [PATCH 06/12] Fix Doxygen. --- analytics/src/include/firebase/analytics.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/analytics/src/include/firebase/analytics.h b/analytics/src/include/firebase/analytics.h index ad3ecabb83..9569023a69 100644 --- a/analytics/src/include/firebase/analytics.h +++ b/analytics/src/include/firebase/analytics.h @@ -507,7 +507,7 @@ void InitiateOnDeviceConversionMeasurementWithPhoneNumber( /// Initiates on-device conversion measurement given a sha256-hashed user email /// address. Requires dependency GoogleAppMeasurementOnDeviceConversion to be /// linked in, otherwise it is a no-op. -/// @param hashedEmailAddress User email address as a UTF8-encoded string +/// @param hashed_email_address User email address as a UTF8-encoded string /// normalized and hashed according to the instructions at /// https://firebase.google.com/docs/tutorials/ads-ios-on-device-measurement/step-3. void InitiateOnDeviceConversionMeasurementWithHashedEmailAddress( @@ -517,7 +517,7 @@ void InitiateOnDeviceConversionMeasurementWithHashedEmailAddress( /// number in E.164 format. Requires dependency /// GoogleAppMeasurementOnDeviceConversion to be linked in, otherwise it is a /// no-op. -/// @param hashedPhoneNumber UTF8-encoded user phone number in E.164 format and +/// @param hashed_phone_number UTF8-encoded user phone number in E.164 format and /// then hashed according to the instructions at /// https://firebase.google.com/docs/tutorials/ads-ios-on-device-measurement/step-3. void InitiateOnDeviceConversionMeasurementWithHashedPhoneNumber( From 1ff94d6d974a37af350989f21e31f3dde963f00e Mon Sep 17 00:00:00 2001 From: Jon Simantov Date: Thu, 6 Jun 2024 12:59:13 -0700 Subject: [PATCH 07/12] Add iOS implementation. --- analytics/src/analytics_android.cc | 18 ++++++++++++++++++ analytics/src/analytics_ios.mm | 20 ++++++++++++++++++++ app/src/util_ios.h | 3 +++ app/src/util_ios.mm | 4 ++++ 4 files changed, 45 insertions(+) diff --git a/analytics/src/analytics_android.cc b/analytics/src/analytics_android.cc index 7907bd9701..c6d771eb24 100644 --- a/analytics/src/analytics_android.cc +++ b/analytics/src/analytics_android.cc @@ -451,6 +451,24 @@ void InitiateOnDeviceConversionMeasurementWithPhoneNumber( // No-op on Android } +/// Initiates on-device conversion measurement given a hashed 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 InitiateOnDeviceConversionMeasurementWithHashedEmailAddress(std::vector hashed_email) { + FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized()); + // No-op on Android +} + +/// Initiates on-device conversion measurement given a hashed phone number on +/// iOS (no-op on Android). On iOS, requires dependency +/// GoogleAppMeasurementOnDeviceConversion to be linked in, otherwise it is a +/// no-op. +void InitiateOnDeviceConversionMeasurementWithHashedPhoneNumber(std::vector hashed_phone) { + 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()); diff --git a/analytics/src/analytics_ios.mm b/analytics/src/analytics_ios.mm index 99297cb40d..48931e649a 100644 --- a/analytics/src/analytics_ios.mm +++ b/analytics/src/analytics_ios.mm @@ -280,6 +280,26 @@ void InitiateOnDeviceConversionMeasurementWithPhoneNumber(const char* phone_numb [FIRAnalytics initiateOnDeviceConversionMeasurementWithPhoneNumber:@(phone_number)]; } +/// Initiates on-device conversion measurement given a hashed 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 InitiateOnDeviceConversionMeasurementWithHashedEmailAddress(std::vector hashed_email) { + FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized()); + NSData *hashed_email_data = firebase::util::BytesToNSData(&hashed_email[0], hashed_email.size()); + [FIRAnalytics initiateOnDeviceConversionMeasurementWithHashedEmailAddress:hashed_email_data]; +} + +/// Initiates on-device conversion measurement given a hashed phone number on +/// iOS (no-op on Android). On iOS, requires dependency +/// GoogleAppMeasurementOnDeviceConversion to be linked in, otherwise it is a +/// no-op. +void InitiateOnDeviceConversionMeasurementWithHashedPhoneNumber(std::vector hashed_phone) { + FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized()); + NSData *hashed_phone_data = firebase::util::BytesToNSData(&hashed_phone[0], hashed_phone.size()); + [FIRAnalytics initiateOnDeviceConversionMeasurementWithHashedPhoneNumber:hashed_phone_data]; +} + // Set a user property to the given value. void SetUserProperty(const char* name, const char* value) { FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized()); diff --git a/app/src/util_ios.h b/app/src/util_ios.h index daf7e9c1bc..454fab09cd 100644 --- a/app/src/util_ios.h +++ b/app/src/util_ios.h @@ -217,6 +217,9 @@ NSData *StringToNSData(const std::string &str); // Convert bytes to NSData. NSData *BytesToNSData(const char *bytes, const int len); +// Convert bytes to NSData. +NSData *BytesToNSData(const unsigned char *bytes, const int len); + // Convert an NSData to std::string. std::string NSDataToString(NSData *data); diff --git a/app/src/util_ios.mm b/app/src/util_ios.mm index c2d194ad87..21a70e6c85 100644 --- a/app/src/util_ios.mm +++ b/app/src/util_ios.mm @@ -139,6 +139,10 @@ void ForEachAppDelegateClass(void (^block)(Class)) { return [NSData dataWithBytes:bytes length:len]; } +NSData *BytesToNSData(const unsigned char *bytes, const int len) { + return [NSData dataWithBytes:bytes length:len]; +} + std::string NSDataToString(NSData *data) { return std::string(static_cast(data.bytes), data.length); } From 9a5abf9551ddba3952647ae769e061d0734427dd Mon Sep 17 00:00:00 2001 From: Jon Simantov Date: Thu, 6 Jun 2024 13:21:59 -0700 Subject: [PATCH 08/12] Add iOS implementation. --- analytics/src/analytics_ios.mm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/analytics/src/analytics_ios.mm b/analytics/src/analytics_ios.mm index 48931e649a..42c916fa8f 100644 --- a/analytics/src/analytics_ios.mm +++ b/analytics/src/analytics_ios.mm @@ -286,7 +286,7 @@ void InitiateOnDeviceConversionMeasurementWithPhoneNumber(const char* phone_numb /// no-op. void InitiateOnDeviceConversionMeasurementWithHashedEmailAddress(std::vector hashed_email) { FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized()); - NSData *hashed_email_data = firebase::util::BytesToNSData(&hashed_email[0], hashed_email.size()); + NSData *hashed_email_data = firebase::util::BytesToNSData(&hashed_email.data(), hashed_email.size()); [FIRAnalytics initiateOnDeviceConversionMeasurementWithHashedEmailAddress:hashed_email_data]; } @@ -296,7 +296,7 @@ void InitiateOnDeviceConversionMeasurementWithHashedEmailAddress(std::vector hashed_phone) { FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized()); - NSData *hashed_phone_data = firebase::util::BytesToNSData(&hashed_phone[0], hashed_phone.size()); + NSData *hashed_phone_data = firebase::util::BytesToNSData(&hashed_phone.data(), hashed_phone.size()); [FIRAnalytics initiateOnDeviceConversionMeasurementWithHashedPhoneNumber:hashed_phone_data]; } From 7c5436cce25c332d17aa2d1faa8b81494a16bfcb Mon Sep 17 00:00:00 2001 From: Jon Simantov Date: Thu, 6 Jun 2024 13:33:25 -0700 Subject: [PATCH 09/12] Format code. --- analytics/src/analytics_android.cc | 6 ++++-- analytics/src/analytics_ios.mm | 12 ++++++++---- analytics/src/include/firebase/analytics.h | 4 ++-- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/analytics/src/analytics_android.cc b/analytics/src/analytics_android.cc index c6d771eb24..16f55b8995 100644 --- a/analytics/src/analytics_android.cc +++ b/analytics/src/analytics_android.cc @@ -455,7 +455,8 @@ void InitiateOnDeviceConversionMeasurementWithPhoneNumber( /// on iOS (no-op on Android). On iOS, requires dependency /// GoogleAppMeasurementOnDeviceConversion to be linked in, otherwise it is a /// no-op. -void InitiateOnDeviceConversionMeasurementWithHashedEmailAddress(std::vector hashed_email) { +void InitiateOnDeviceConversionMeasurementWithHashedEmailAddress( + std::vector hashed_email) { FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized()); // No-op on Android } @@ -464,7 +465,8 @@ void InitiateOnDeviceConversionMeasurementWithHashedEmailAddress(std::vector hashed_phone) { +void InitiateOnDeviceConversionMeasurementWithHashedPhoneNumber( + std::vector hashed_phone) { FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized()); // No-op on Android } diff --git a/analytics/src/analytics_ios.mm b/analytics/src/analytics_ios.mm index 42c916fa8f..71e7865de3 100644 --- a/analytics/src/analytics_ios.mm +++ b/analytics/src/analytics_ios.mm @@ -284,9 +284,11 @@ void InitiateOnDeviceConversionMeasurementWithPhoneNumber(const char* phone_numb /// on iOS (no-op on Android). On iOS, requires dependency /// GoogleAppMeasurementOnDeviceConversion to be linked in, otherwise it is a /// no-op. -void InitiateOnDeviceConversionMeasurementWithHashedEmailAddress(std::vector hashed_email) { +void InitiateOnDeviceConversionMeasurementWithHashedEmailAddress( + std::vector hashed_email) { FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized()); - NSData *hashed_email_data = firebase::util::BytesToNSData(&hashed_email.data(), hashed_email.size()); + NSData* hashed_email_data = + firebase::util::BytesToNSData(&hashed_email.data(), hashed_email.size()); [FIRAnalytics initiateOnDeviceConversionMeasurementWithHashedEmailAddress:hashed_email_data]; } @@ -294,9 +296,11 @@ void InitiateOnDeviceConversionMeasurementWithHashedEmailAddress(std::vector hashed_phone) { +void InitiateOnDeviceConversionMeasurementWithHashedPhoneNumber( + std::vector hashed_phone) { FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized()); - NSData *hashed_phone_data = firebase::util::BytesToNSData(&hashed_phone.data(), hashed_phone.size()); + NSData* hashed_phone_data = + firebase::util::BytesToNSData(&hashed_phone.data(), hashed_phone.size()); [FIRAnalytics initiateOnDeviceConversionMeasurementWithHashedPhoneNumber:hashed_phone_data]; } diff --git a/analytics/src/include/firebase/analytics.h b/analytics/src/include/firebase/analytics.h index 9569023a69..d11893c59a 100644 --- a/analytics/src/include/firebase/analytics.h +++ b/analytics/src/include/firebase/analytics.h @@ -517,8 +517,8 @@ void InitiateOnDeviceConversionMeasurementWithHashedEmailAddress( /// number in E.164 format. Requires dependency /// GoogleAppMeasurementOnDeviceConversion to be linked in, otherwise it is a /// no-op. -/// @param hashed_phone_number UTF8-encoded user phone number in E.164 format and -/// then hashed according to the instructions at +/// @param hashed_phone_number UTF8-encoded user phone number in E.164 format +/// and then hashed according to the instructions at /// https://firebase.google.com/docs/tutorials/ads-ios-on-device-measurement/step-3. void InitiateOnDeviceConversionMeasurementWithHashedPhoneNumber( std::vector hashed_phone_number); From 297fde87fe5f405babe8c9edabb0462ed9a59aad Mon Sep 17 00:00:00 2001 From: Jon Simantov Date: Thu, 6 Jun 2024 13:50:07 -0700 Subject: [PATCH 10/12] Add readme. --- release_build_files/readme.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/release_build_files/readme.md b/release_build_files/readme.md index 2edf2fe37c..40ca9790f0 100644 --- a/release_build_files/readme.md +++ b/release_build_files/readme.md @@ -631,6 +631,12 @@ workflow use only during the development of your app, not for publicly shipping code. ## Release Notes +### Upcoming Release +- Changes + - Analytics (iOS): Add support for + `InitiateOnDeviceConversionMeasurementWithHashedEmailAddress` and + `InitiateOnDeviceConversionMeasurementWithHashedPhoneNumber`. + ### 12.0.0 - Changes - General (Android): Update to Firebase Android BoM version 33.0.0. From f47544188bf820a5fbff7ba03d62c531ceecfc16 Mon Sep 17 00:00:00 2001 From: Jon Simantov Date: Thu, 6 Jun 2024 15:11:07 -0700 Subject: [PATCH 11/12] Fix usage. --- analytics/src/analytics_ios.mm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/analytics/src/analytics_ios.mm b/analytics/src/analytics_ios.mm index 71e7865de3..4ceb8bdc7a 100644 --- a/analytics/src/analytics_ios.mm +++ b/analytics/src/analytics_ios.mm @@ -288,7 +288,7 @@ void InitiateOnDeviceConversionMeasurementWithHashedEmailAddress( std::vector hashed_email) { FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized()); NSData* hashed_email_data = - firebase::util::BytesToNSData(&hashed_email.data(), hashed_email.size()); + firebase::util::BytesToNSData(hashed_email.data(), hashed_email.size()); [FIRAnalytics initiateOnDeviceConversionMeasurementWithHashedEmailAddress:hashed_email_data]; } @@ -300,7 +300,7 @@ void InitiateOnDeviceConversionMeasurementWithHashedPhoneNumber( std::vector hashed_phone) { FIREBASE_ASSERT_RETURN_VOID(internal::IsInitialized()); NSData* hashed_phone_data = - firebase::util::BytesToNSData(&hashed_phone.data(), hashed_phone.size()); + firebase::util::BytesToNSData(hashed_phone.data(), hashed_phone.size()); [FIRAnalytics initiateOnDeviceConversionMeasurementWithHashedPhoneNumber:hashed_phone_data]; } From 8bd0fdd4b9939ebdc4acd1813bd6105912ff3249 Mon Sep 17 00:00:00 2001 From: Jon Simantov Date: Thu, 6 Jun 2024 16:29:12 -0700 Subject: [PATCH 12/12] Capitalize SHA --- analytics/src/include/firebase/analytics.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/analytics/src/include/firebase/analytics.h b/analytics/src/include/firebase/analytics.h index d11893c59a..286cb7c59b 100644 --- a/analytics/src/include/firebase/analytics.h +++ b/analytics/src/include/firebase/analytics.h @@ -504,7 +504,7 @@ void InitiateOnDeviceConversionMeasurementWithEmailAddress( void InitiateOnDeviceConversionMeasurementWithPhoneNumber( const char* phone_number); -/// Initiates on-device conversion measurement given a sha256-hashed user email +/// Initiates on-device conversion measurement given a SHA256-hashed user email /// address. Requires dependency GoogleAppMeasurementOnDeviceConversion to be /// linked in, otherwise it is a no-op. /// @param hashed_email_address User email address as a UTF8-encoded string @@ -513,7 +513,7 @@ void InitiateOnDeviceConversionMeasurementWithPhoneNumber( void InitiateOnDeviceConversionMeasurementWithHashedEmailAddress( std::vector hashed_email_address); -/// Initiates on-device conversion measurement given a sha256-hashed phone +/// Initiates on-device conversion measurement given a SHA256-hashed phone /// number in E.164 format. Requires dependency /// GoogleAppMeasurementOnDeviceConversion to be linked in, otherwise it is a /// no-op.