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..411b48cc 100644 --- a/android/src/main/java/com/facebook/reactnative/androidsdk/FBAppEventsLoggerModule.java +++ b/android/src/main/java/com/facebook/reactnative/androidsdk/FBAppEventsLoggerModule.java @@ -24,7 +24,9 @@ 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.Promise; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; @@ -109,6 +111,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 +122,7 @@ public FBAppEventsLoggerModule(ReactApplicationContext reactContext) { @Override public void initialize() { mAppEventLogger = AppEventsLogger.newLogger(mReactContext); + mAttributionIdentifiers = AttributionIdentifiers.getAttributionIdentifiers(mReactContext); } @Override @@ -216,6 +220,45 @@ 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 + 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 + */ + @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 + */ + @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); + } + } + /** * 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..fd73415f 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,30 @@ - (dispatch_queue_t)methodQueue return [FBSDKAppEvents userID]; } +RCT_EXPORT_METHOD(getAnonymousID:(RCTPromiseResolveBlock)resolve + rejecter:(RCTPromiseRejectBlock)reject) +{ + @try { + NSString *anonymousID = [FBSDKAppEvents anonymousID]; + resolve(anonymousID); + } + @catch (NSError *error) { + reject(@"E_ANONYMOUS_ID_ERROR", @"Can not get anonymousID", error); + } +} + +RCT_EXPORT_METHOD(getAdvertiserID:(RCTPromiseResolveBlock)resolve + rejecter:(RCTPromiseRejectBlock)reject) +{ + @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) { 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.