diff --git a/packages/core/android/src/main/java/com/segment/analytics/reactnative/core/RNAnalyticsModule.kt b/packages/core/android/src/main/java/com/segment/analytics/reactnative/core/RNAnalyticsModule.kt
index 9e247cc87..c0be2fc49 100644
--- a/packages/core/android/src/main/java/com/segment/analytics/reactnative/core/RNAnalyticsModule.kt
+++ b/packages/core/android/src/main/java/com/segment/analytics/reactnative/core/RNAnalyticsModule.kt
@@ -229,6 +229,10 @@ class RNAnalyticsModule(context: ReactApplicationContext): ReactContextBaseJavaM
@ReactMethod
fun getAnonymousId(promise: Promise) =
promise.resolve(analytics.getAnalyticsContext().traits().anonymousId())
+
+ @ReactMethod
+ fun putDeviceToken(deviceToken: String) =
+ analytics.getAnalyticsContext().putDeviceToken(deviceToken)
}
private fun optionsFrom(context: ReadableMap?, integrations: ReadableMap?): Options {
diff --git a/packages/core/docs/classes/analytics.client.md b/packages/core/docs/classes/analytics.client.md
index db9fd229d..73cfa4500 100644
--- a/packages/core/docs/classes/analytics.client.md
+++ b/packages/core/docs/classes/analytics.client.md
@@ -233,6 +233,25 @@ analytics.middleware(async ({next, context}) =>
**Returns:** `this`
+___
+
+
+### putDeviceToken
+
+▸ **putDeviceToken**(deviceToken: *`string`*): `Promise`<`void`>
+
+*Defined in analytics.ts:317*
+
+Set a device token.
+
+**Parameters:**
+
+| Name | Type |
+| ------ | ------ |
+| deviceToken | `string` |
+
+**Returns:** `Promise`<`void`>
+
___
diff --git a/packages/core/ios/RNAnalytics/RNAnalytics.m b/packages/core/ios/RNAnalytics/RNAnalytics.m
index 999369e49..bd223d36a 100644
--- a/packages/core/ios/RNAnalytics/RNAnalytics.m
+++ b/packages/core/ios/RNAnalytics/RNAnalytics.m
@@ -150,4 +150,9 @@ - (NSDictionary*)withContextAndIntegrations :(NSDictionary*)context :(NSDictiona
resolver(anonymousId);
}
+RCT_EXPORT_METHOD(putDeviceToken:(NSString*)deviceToken)
+{
+ [SEGAnalytics.sharedAnalytics putDeviceToken:deviceToken];
+}
+
@end
diff --git a/packages/core/src/__mocks__/bridge.ts b/packages/core/src/__mocks__/bridge.ts
index 88daad5f1..401890d76 100644
--- a/packages/core/src/__mocks__/bridge.ts
+++ b/packages/core/src/__mocks__/bridge.ts
@@ -6,6 +6,7 @@ export default {
getAnonymousId: jest.fn(),
group: jest.fn(),
identify: jest.fn(),
+ putDeviceToken: jest.fn(),
reset: jest.fn(),
screen: jest.fn(),
setup: jest.fn(),
diff --git a/packages/core/src/__tests__/analytics.spec.ts b/packages/core/src/__tests__/analytics.spec.ts
index 65962b5ad..d8f97cce1 100644
--- a/packages/core/src/__tests__/analytics.spec.ts
+++ b/packages/core/src/__tests__/analytics.spec.ts
@@ -81,6 +81,8 @@ it('does .disable()', testCall('disable'))
it('does .getAnonymousId()', testCall('getAnonymousId'))
+it('does .putDeviceToken()', () => testCall('putDeviceToken')('d34db33f'))
+
it('logs uncaught bridge errors', async () => {
const error = {
message: 'test-error'
diff --git a/packages/core/src/analytics.ts b/packages/core/src/analytics.ts
index 9a80c6ad1..573dd686d 100644
--- a/packages/core/src/analytics.ts
+++ b/packages/core/src/analytics.ts
@@ -313,6 +313,13 @@ export module Analytics {
return Bridge.getAnonymousId()
}
+ /** Set a device token. */
+ public async putDeviceToken(deviceToken: string) {
+ await this.wrapper.wait()
+
+ Bridge.putDeviceToken(deviceToken)
+ }
+
private handleError(error: Error) {
const { handlers } = this
diff --git a/packages/core/src/bridge.ts b/packages/core/src/bridge.ts
index 099659af5..7e5ccc408 100644
--- a/packages/core/src/bridge.ts
+++ b/packages/core/src/bridge.ts
@@ -74,6 +74,7 @@ export interface Bridge {
enable(): Promise
disable(): Promise
getAnonymousId(): Promise
+ putDeviceToken(deviceToken: string): Promise
}
const bridge: Bridge = NativeModules.RNAnalytics