From 5b97a7d7efcdf5ffeef6e1c6bb9fa1ba2eecc59c Mon Sep 17 00:00:00 2001 From: VEnom42 Date: Thu, 29 Oct 2020 11:31:23 +0700 Subject: [PATCH 1/2] add getters for anonymousID, attributionID and advertiserID --- .../androidsdk/FBAppEventsLoggerModule.java | 37 +++++++++++++++++++ ios/RCTFBSDK/core/RCTFBSDKAppEvents.m | 11 ++++++ src/FBAppEventsLogger.js | 26 +++++++++++++ 3 files changed, 74 insertions(+) diff --git a/android/src/main/java/com/facebook/reactnative/androidsdk/FBAppEventsLoggerModule.java b/android/src/main/java/com/facebook/reactnative/androidsdk/FBAppEventsLoggerModule.java index 51de9330..cc3dabc5 100644 --- a/android/src/main/java/com/facebook/reactnative/androidsdk/FBAppEventsLoggerModule.java +++ b/android/src/main/java/com/facebook/reactnative/androidsdk/FBAppEventsLoggerModule.java @@ -24,6 +24,7 @@ import com.facebook.appevents.AppEventsConstants; import com.facebook.appevents.AppEventsLogger; +import com.facebook.internal.AttributionIdentifiers; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; @@ -109,6 +110,7 @@ public class FBAppEventsLoggerModule extends ReactContextBaseJavaModule { public static final String NAME = "FBAppEventsLogger"; private AppEventsLogger mAppEventLogger; + private AttributionIdentifiers mAttributionIdentifiers; private ReactApplicationContext mReactContext; public FBAppEventsLoggerModule(ReactApplicationContext reactContext) { @@ -119,6 +121,7 @@ public FBAppEventsLoggerModule(ReactApplicationContext reactContext) { @Override public void initialize() { mAppEventLogger = AppEventsLogger.newLogger(mReactContext); + mAttributionIdentifiers = AttributionIdentifiers.getAttributionIdentifiers(mReactContext); } @Override @@ -216,6 +219,40 @@ public String getUserID() { return mAppEventLogger.getUserID(); } + /** + * Each app/device pair gets an GUID that is sent back with App Events and persisted with this + * app/device pair. + * + * @return The GUID for this app/device pair. + */ + @ReactMethod(isBlockingSynchronousMethod = true) + @Nullable + public String getAnonymousID() { + return mAppEventLogger.getAnonymousAppDeviceGUID(mReactContext); + } + + /** + * Returns the advertiser id or null if not set + * + * @return The advertiser ID or null + */ + @ReactMethod(isBlockingSynchronousMethod = true) + @Nullable + public String getAdvertiserID() { + return mAttributionIdentifiers.getAndroidAdvertiserId(); + } + + /** + * Returns the attribution id or null if not set + * + * @return The attribution ID or null + */ + @ReactMethod(isBlockingSynchronousMethod = true) + @Nullable + public String getAttributionID() { + return mAttributionIdentifiers.getAttributionId(); + } + /** * Sends a request to update the properties for the current user, set by * setUserID. You must call setUserID before making this call. diff --git a/ios/RCTFBSDK/core/RCTFBSDKAppEvents.m b/ios/RCTFBSDK/core/RCTFBSDKAppEvents.m index 52b1d0c1..dcbb0fd6 100644 --- a/ios/RCTFBSDK/core/RCTFBSDKAppEvents.m +++ b/ios/RCTFBSDK/core/RCTFBSDKAppEvents.m @@ -21,6 +21,7 @@ #import #import "RCTConvert+FBSDKAccessToken.h" +#import "FBSDKCoreKit/FBSDKAppEventsUtility.h" @implementation RCTConvert (RCTFBSDKAppEvents) @@ -81,6 +82,16 @@ - (dispatch_queue_t)methodQueue return [FBSDKAppEvents userID]; } +RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getAnonymousID) +{ + return [FBSDKAppEvents anonymousID]; +} + +RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getAdvertiserID) +{ + return [FBSDKAppEventsUtility advertiserID]; +} + RCT_EXPORT_METHOD(updateUserProperties:(NSDictionary *)parameters) { parameters = RCTDictionaryWithoutNullValues(parameters); diff --git a/src/FBAppEventsLogger.js b/src/FBAppEventsLogger.js index 9bddf97b..25a99de1 100644 --- a/src/FBAppEventsLogger.js +++ b/src/FBAppEventsLogger.js @@ -23,6 +23,7 @@ 'use strict'; const AppEventsLogger = require('react-native').NativeModules.FBAppEventsLogger; +const {Platform} = require('react-native'); /** * Controls when an AppEventsLogger sends log events to the server */ @@ -126,6 +127,31 @@ module.exports = { return await AppEventsLogger.getUserID(); }, + /** + * Returns anonymous id or null if not set + */ + async getAnonymousID(): Promise { + return await AppEventsLogger.getAnonymousID(); + }, + + /** + * Returns advertiser id or null if not set + */ + async getAdvertiserID(): Promise { + return await AppEventsLogger.getAdvertiserID(); + }, + + /** + * Returns advertiser id or null if not set. + * @platform android + */ + async getAttributionID(): Promise { + if (Platform.OS === 'ios') { + return null; + } + return await AppEventsLogger.getAttributionID(); + }, + /** * Sends a request to update the properties for the current user, set by * setUserID. You must call setUserID before making this call. From 8d7714138040d62ed6858a4e84c8d835bbb68d32 Mon Sep 17 00:00:00 2001 From: VEnom42 Date: Mon, 9 Nov 2020 16:26:24 +0700 Subject: [PATCH 2/2] use promise api instead of blocking methods --- .../androidsdk/FBAppEventsLoggerModule.java | 38 +++++++++++-------- ios/RCTFBSDK/core/RCTFBSDKAppEvents.m | 22 +++++++++-- 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/android/src/main/java/com/facebook/reactnative/androidsdk/FBAppEventsLoggerModule.java b/android/src/main/java/com/facebook/reactnative/androidsdk/FBAppEventsLoggerModule.java index cc3dabc5..411b48cc 100644 --- a/android/src/main/java/com/facebook/reactnative/androidsdk/FBAppEventsLoggerModule.java +++ b/android/src/main/java/com/facebook/reactnative/androidsdk/FBAppEventsLoggerModule.java @@ -26,6 +26,7 @@ import com.facebook.appevents.AppEventsLogger; import com.facebook.internal.AttributionIdentifiers; import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; @@ -225,32 +226,37 @@ public String getUserID() { * * @return The GUID for this app/device pair. */ - @ReactMethod(isBlockingSynchronousMethod = true) - @Nullable - public String getAnonymousID() { - return mAppEventLogger.getAnonymousAppDeviceGUID(mReactContext); + @ReactMethod + public void getAnonymousID(Promise promise) { + try { + promise.resolve(mAppEventLogger.getAnonymousAppDeviceGUID(mReactContext)); + } catch (Exception e) { + promise.reject("E_ANONYMOUS_ID_ERROR", "Can not get anonymousID", e); + } } /** * Returns the advertiser id or null if not set - * - * @return The advertiser ID or null */ - @ReactMethod(isBlockingSynchronousMethod = true) - @Nullable - public String getAdvertiserID() { - return mAttributionIdentifiers.getAndroidAdvertiserId(); + @ReactMethod + public void getAdvertiserID(Promise promise) { + try { + promise.resolve(mAttributionIdentifiers.getAndroidAdvertiserId()); + } catch (Exception e) { + promise.reject("E_ADVERTISER_ID_ERROR", "Can not get advertiserID", e); + } } /** * Returns the attribution id or null if not set - * - * @return The attribution ID or null */ - @ReactMethod(isBlockingSynchronousMethod = true) - @Nullable - public String getAttributionID() { - return mAttributionIdentifiers.getAttributionId(); + @ReactMethod + public void getAttributionID(Promise promise) { + try { + promise.resolve(mAttributionIdentifiers.getAttributionId()); + } catch (Exception e) { + promise.reject("E_ATTRIBUTION_ID_ERROR", "Can not get attributionID", e); + } } /** diff --git a/ios/RCTFBSDK/core/RCTFBSDKAppEvents.m b/ios/RCTFBSDK/core/RCTFBSDKAppEvents.m index dcbb0fd6..fd73415f 100644 --- a/ios/RCTFBSDK/core/RCTFBSDKAppEvents.m +++ b/ios/RCTFBSDK/core/RCTFBSDKAppEvents.m @@ -82,14 +82,28 @@ - (dispatch_queue_t)methodQueue return [FBSDKAppEvents userID]; } -RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getAnonymousID) +RCT_EXPORT_METHOD(getAnonymousID:(RCTPromiseResolveBlock)resolve + rejecter:(RCTPromiseRejectBlock)reject) { - return [FBSDKAppEvents anonymousID]; + @try { + NSString *anonymousID = [FBSDKAppEvents anonymousID]; + resolve(anonymousID); + } + @catch (NSError *error) { + reject(@"E_ANONYMOUS_ID_ERROR", @"Can not get anonymousID", error); + } } -RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getAdvertiserID) +RCT_EXPORT_METHOD(getAdvertiserID:(RCTPromiseResolveBlock)resolve + rejecter:(RCTPromiseRejectBlock)reject) { - return [FBSDKAppEventsUtility advertiserID]; + @try { + NSString *advertiserID = [FBSDKAppEventsUtility advertiserID]; + resolve(advertiserID); + } + @catch (NSError *error) { + reject(@"E_ADVERTISER_ID_ERROR", @"Can not get advertiserID", error); + } } RCT_EXPORT_METHOD(updateUserProperties:(NSDictionary *)parameters)