Skip to content

Commit d426a88

Browse files
committed
2 parents c46e872 + abb4a1a commit d426a88

File tree

3 files changed

+65
-0
lines changed

3 files changed

+65
-0
lines changed

README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,22 @@ const events = [
158158
ReactOneSignal.initialize(applicationId, options, events);
159159
```
160160

161+
### OneSignal Tags and Audience Segmenting
162+
163+
You can use `sendTag` and `sendTags` to set OneSignal tags for segment filtering.
164+
```js
165+
// Send a tag to OneSignal for the current player
166+
OneSignal.sendTag('tag', 'tagValue');
167+
168+
// Send multiple tags to OneSignal for the current player
169+
const keyValues = {
170+
'tag1': 'value1',
171+
'tag2': 'value2',
172+
'tag3': 'value3',
173+
};
174+
OneSignal.sendTags(keyValues);
175+
```
176+
161177
## Contributing
162178

163179
Pull requests are welcome! If you have any feedback, issue or suggestion, feel free to open [a new issue](https://github.com/pedro-lb/react-onesignal/issues/new) so we can talk about it 💬.

package/src/oneSignal.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,51 @@ const getExternalUserId = () => new Promise<string>((resolve, reject) => {
342342
}
343343
});
344344

345+
/**
346+
* Sets a key/value "tag" pair on OneSignal.
347+
*
348+
* @param key string
349+
* @param val string
350+
*/
351+
const sendTag = (key: string, val: string) => new Promise<string>((resolve, reject) => {
352+
const oneSignal = getOneSignalInstance();
353+
354+
if (!oneSignal) {
355+
reject();
356+
return;
357+
}
358+
359+
try {
360+
oneSignal.sendTag(key, val)
361+
.then((value) => resolve(value))
362+
.catch((error) => reject(error));
363+
} catch (error) {
364+
reject(error);
365+
}
366+
});
367+
368+
/**
369+
* Sets a collection of key/value "tag" pairs on OneSignal.
370+
*
371+
* @param keyValues obj
372+
*/
373+
const sendTags = (keyValues: object) => new Promise<string>((resolve, reject) => {
374+
const oneSignal = getOneSignalInstance();
375+
376+
if (!oneSignal) {
377+
reject();
378+
return;
379+
}
380+
381+
try {
382+
oneSignal.sendTags(keyValues)
383+
.then((value) => resolve(value))
384+
.catch((error) => reject(error));
385+
} catch (error) {
386+
reject(error);
387+
}
388+
});
389+
345390
/**
346391
* Object for manipulating OneSignal.
347392
*/
@@ -355,6 +400,8 @@ const ReactOneSignal = {
355400
getPlayerId,
356401
setExternalUserId,
357402
getExternalUserId,
403+
sendTag,
404+
sendTags,
358405
};
359406

360407
export default ReactOneSignal;

package/src/oneSignal.types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ export interface IOneSignal {
88
setExternalUserId: (externalUserId: string | number) => Promise<void>,
99
getExternalUserId: () => Promise<any>,
1010
initialized: boolean,
11+
sendTag: (key: string, val: string) => Promise<string>;
12+
sendTags: (keyValues: object) => Promise<any>;
1113
}
1214

1315
export interface OneSignalOptions {

0 commit comments

Comments
 (0)