react-native-applovin-max 6.0.0 → 6.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,8 @@
1
- import { NativeModules } from "react-native";
2
- import { addEventListener, removeEventListener } from "./EventEmitter"
3
- import type { AdDisplayFailedInfo, AdInfo, AdLoadFailedInfo, AdRevenueInfo } from "./types/AdInfo";
4
- import type { InterstitialAdType } from "./types/InterstitialAd";
1
+ import { NativeModules } from 'react-native';
2
+ import { addEventListener, removeEventListener } from './EventEmitter';
3
+ import type { AdDisplayFailedInfo, AdInfo, AdLoadFailedInfo, AdRevenueInfo } from './types/AdInfo';
4
+ import type { LocalExtraParameterValue } from './types/AdProps';
5
+ import type { InterstitialAdType } from './types/InterstitialAd';
5
6
 
6
7
  const { AppLovinMAX } = NativeModules;
7
8
 
@@ -17,83 +18,81 @@ const {
17
18
 
18
19
  const isAdReady = (adUnitId: string): Promise<boolean> => {
19
20
  return AppLovinMAX.isInterstitialReady(adUnitId);
20
- }
21
+ };
21
22
 
22
23
  const loadAd = (adUnitId: string): void => {
23
24
  AppLovinMAX.loadInterstitial(adUnitId);
24
- }
25
+ };
25
26
 
26
- const showAd = (
27
- adUnitId: string,
28
- placement?: string | null,
29
- customData?: string | null
30
- ): void => {
27
+ const showAd = (adUnitId: string, placement?: string | null, customData?: string | null): void => {
31
28
  AppLovinMAX.showInterstitial(adUnitId, placement ?? null, customData ?? null);
32
- }
29
+ };
33
30
 
34
- const setExtraParameter = (adUnitId: string, key: string, value: any): void => {
31
+ const setExtraParameter = (adUnitId: string, key: string, value: string | null): void => {
35
32
  AppLovinMAX.setInterstitialExtraParameter(adUnitId, key, value);
36
- }
33
+ };
37
34
 
38
- const setLocalExtraParameter = (adUnitId: string, key: string, value: any): void => {
35
+ const setLocalExtraParameter = (adUnitId: string, key: string, value: LocalExtraParameterValue): void => {
39
36
  AppLovinMAX.setInterstitialLocalExtraParameter(adUnitId, { [key]: value });
40
- }
37
+ };
41
38
 
42
39
  const addAdLoadedEventListener = (listener: (adInfo: AdInfo) => void) => {
43
40
  addEventListener(ON_INTERSTITIAL_LOADED_EVENT, (adInfo: AdInfo) => listener(adInfo));
44
- }
41
+ };
45
42
 
46
43
  const removeAdLoadedEventListener = () => {
47
44
  removeEventListener(ON_INTERSTITIAL_LOADED_EVENT);
48
- }
45
+ };
49
46
 
50
47
  const addAdLoadFailedEventListener = (listener: (errorInfo: AdLoadFailedInfo) => void) => {
51
48
  addEventListener(ON_INTERSTITIAL_LOAD_FAILED_EVENT, (errorInfo: AdLoadFailedInfo) => listener(errorInfo));
52
- }
49
+ };
53
50
 
54
51
  const removeAdLoadFailedEventListener = () => {
55
52
  removeEventListener(ON_INTERSTITIAL_LOAD_FAILED_EVENT);
56
- }
53
+ };
57
54
 
58
55
  const addAdClickedEventListener = (listener: (adInfo: AdInfo) => void) => {
59
56
  addEventListener(ON_INTERSTITIAL_CLICKED_EVENT, (adInfo: AdInfo) => listener(adInfo));
60
- }
57
+ };
61
58
 
62
59
  const removeAdClickedEventListener = () => {
63
60
  removeEventListener(ON_INTERSTITIAL_CLICKED_EVENT);
64
- }
61
+ };
65
62
 
66
63
  const addAdDisplayedEventListener = (listener: (adInfo: AdInfo) => void) => {
67
64
  addEventListener(ON_INTERSTITIAL_DISPLAYED_EVENT, (adInfo: AdInfo) => listener(adInfo));
68
- }
65
+ };
69
66
 
70
67
  const removeAdDisplayedEventListener = () => {
71
68
  removeEventListener(ON_INTERSTITIAL_DISPLAYED_EVENT);
72
- }
69
+ };
73
70
 
74
71
  const addAdFailedToDisplayEventListener = (listener: (errorInfo: AdDisplayFailedInfo) => void) => {
75
- addEventListener(ON_INTERSTITIAL_AD_FAILED_TO_DISPLAY_EVENT, (errorInfo: AdDisplayFailedInfo) => listener(errorInfo));
76
- }
72
+ addEventListener(ON_INTERSTITIAL_AD_FAILED_TO_DISPLAY_EVENT, (errorInfo: AdDisplayFailedInfo) =>
73
+ listener(errorInfo)
74
+ );
75
+ };
77
76
 
78
77
  const removeAdFailedToDisplayEventListener = () => {
79
78
  removeEventListener(ON_INTERSTITIAL_AD_FAILED_TO_DISPLAY_EVENT);
80
- }
79
+ };
81
80
 
82
81
  const addAdHiddenEventListener = (listener: (adInfo: AdInfo) => void) => {
83
82
  addEventListener(ON_INTERSTITIAL_HIDDEN_EVENT, (adInfo: AdInfo) => listener(adInfo));
84
- }
83
+ };
85
84
 
86
85
  const removeAdHiddenEventListener = () => {
87
86
  removeEventListener(ON_INTERSTITIAL_HIDDEN_EVENT);
88
- }
87
+ };
89
88
 
90
89
  const addAdRevenuePaidListener = (listener: (adInfo: AdRevenueInfo) => void) => {
91
90
  addEventListener(ON_INTERSTITIAL_AD_REVENUE_PAID, (adInfo: AdRevenueInfo) => listener(adInfo));
92
- }
91
+ };
93
92
 
94
93
  const removeAdRevenuePaidListener = () => {
95
94
  removeEventListener(ON_INTERSTITIAL_AD_REVENUE_PAID);
96
- }
95
+ };
97
96
 
98
97
  export const InterstitialAd: InterstitialAdType = {
99
98
  isAdReady,
@@ -123,6 +122,6 @@ export const InterstitialAd: InterstitialAdType = {
123
122
 
124
123
  addAdRevenuePaidListener,
125
124
  removeAdRevenuePaidListener,
126
- }
125
+ };
127
126
 
128
127
  export default InterstitialAd;
package/src/MRecAd.ts CHANGED
@@ -1,8 +1,9 @@
1
- import { NativeModules } from "react-native";
2
- import { addEventListener, removeEventListener } from "./EventEmitter"
3
- import type { AdInfo, AdLoadFailedInfo, AdRevenueInfo } from "./types/AdInfo";
4
- import type { MRecAdType } from "./types/MRecAd";
5
- import type { AdViewPosition } from "./AdView";
1
+ import { NativeModules } from 'react-native';
2
+ import { addEventListener, removeEventListener } from './EventEmitter';
3
+ import type { AdInfo, AdLoadFailedInfo, AdRevenueInfo } from './types/AdInfo';
4
+ import type { LocalExtraParameterValue } from './types/AdProps';
5
+ import type { MRecAdType } from './types/MRecAd';
6
+ import type { AdViewPosition } from './AdView';
6
7
 
7
8
  const { AppLovinMAX } = NativeModules;
8
9
 
@@ -17,95 +18,95 @@ const {
17
18
 
18
19
  const createAd = (adUnitId: string, position: AdViewPosition): void => {
19
20
  AppLovinMAX.createMRec(adUnitId, position);
20
- }
21
+ };
21
22
 
22
23
  const destroyAd = (adUnitId: string): void => {
23
24
  AppLovinMAX.destroyMRec(adUnitId);
24
- }
25
+ };
25
26
 
26
27
  const showAd = (adUnitId: string): void => {
27
28
  AppLovinMAX.showMRec(adUnitId);
28
- }
29
+ };
29
30
 
30
31
  const hideAd = (adUnitId: string): void => {
31
32
  AppLovinMAX.hideMRec(adUnitId);
32
- }
33
+ };
33
34
 
34
35
  const setPlacement = (adUnitId: string, placement: string | null): void => {
35
36
  AppLovinMAX.setMRecPlacement(adUnitId, placement);
36
- }
37
+ };
37
38
 
38
39
  const setCustomData = (adUnitId: string, customData: string | null): void => {
39
40
  AppLovinMAX.setMRecCustomData(adUnitId, customData);
40
- }
41
+ };
41
42
 
42
43
  const updatePosition = (adUnitId: string, bannerPosition: AdViewPosition): void => {
43
44
  AppLovinMAX.updateMRecPosition(adUnitId, bannerPosition);
44
- }
45
+ };
45
46
 
46
- const setExtraParameter = (adUnitId: string, key: string, value: any): void => {
47
+ const setExtraParameter = (adUnitId: string, key: string, value: string | null): void => {
47
48
  AppLovinMAX.setMRecExtraParameter(adUnitId, key, value);
48
- }
49
+ };
49
50
 
50
- const setLocalExtraParameter = (adUnitId: string, key: string, value: any): void => {
51
+ const setLocalExtraParameter = (adUnitId: string, key: string, value: LocalExtraParameterValue): void => {
51
52
  AppLovinMAX.setMRecLocalExtraParameter(adUnitId, { [key]: value });
52
- }
53
+ };
53
54
 
54
55
  const startAutoRefresh = (adUnitId: string): void => {
55
56
  AppLovinMAX.startMRecAutoRefresh(adUnitId);
56
- }
57
+ };
57
58
 
58
59
  const stopAutoRefresh = (adUnitId: string): void => {
59
60
  AppLovinMAX.stopMRecAutoRefresh(adUnitId);
60
- }
61
+ };
61
62
 
62
63
  const addAdLoadedEventListener = (listener: (adInfo: AdInfo) => void) => {
63
64
  addEventListener(ON_MREC_AD_LOADED_EVENT, (adInfo: AdInfo) => listener(adInfo));
64
- }
65
+ };
65
66
 
66
67
  const removeAdLoadedEventListener = () => {
67
68
  removeEventListener(ON_MREC_AD_LOADED_EVENT);
68
- }
69
+ };
69
70
 
70
71
  const addAdLoadFailedEventListener = (listener: (errorInfo: AdLoadFailedInfo) => void) => {
71
72
  addEventListener(ON_MREC_AD_LOAD_FAILED_EVENT, (errorInfo: AdLoadFailedInfo) => listener(errorInfo));
72
- }
73
+ };
73
74
 
74
75
  const removeAdLoadFailedEventListener = () => {
75
76
  removeEventListener(ON_MREC_AD_LOAD_FAILED_EVENT);
76
- }
77
+ };
77
78
 
78
79
  const addAdClickedEventListener = (listener: (adInfo: AdInfo) => void) => {
79
80
  addEventListener(ON_MREC_AD_CLICKED_EVENT, (adInfo: AdInfo) => listener(adInfo));
80
- }
81
+ };
81
82
 
82
83
  const removeAdClickedEventListener = () => {
83
84
  removeEventListener(ON_MREC_AD_CLICKED_EVENT);
84
- }
85
+ };
85
86
 
86
87
  const addAdCollapsedEventListener = (listener: (adInfo: AdInfo) => void) => {
87
88
  addEventListener(ON_MREC_AD_COLLAPSED_EVENT, (adInfo: AdInfo) => listener(adInfo));
88
- }
89
+ };
89
90
 
90
91
  const removeAdCollapsedEventListener = () => {
91
92
  removeEventListener(ON_MREC_AD_COLLAPSED_EVENT);
92
- }
93
+ };
93
94
 
94
95
  const addAdExpandedEventListener = (listener: (adInfo: AdInfo) => void) => {
95
96
  addEventListener(ON_MREC_AD_EXPANDED_EVENT, (adInfo: AdInfo) => listener(adInfo));
96
- }
97
+ };
97
98
 
98
99
  const removeAdExpandedEventListener = () => {
99
100
  removeEventListener(ON_MREC_AD_EXPANDED_EVENT);
100
- }
101
+ };
101
102
 
102
103
  const addAdRevenuePaidListener = (listener: (adInfo: AdRevenueInfo) => void) => {
103
104
  addEventListener(ON_MREC_AD_REVENUE_PAID, (adInfo: AdRevenueInfo) => listener(adInfo));
104
- }
105
+ };
105
106
 
106
107
  const removeAdRevenuePaidListener = () => {
107
108
  removeEventListener(ON_MREC_AD_REVENUE_PAID);
108
- }
109
+ };
109
110
 
110
111
  export const MRecAd: MRecAdType = {
111
112
  createAd,
@@ -142,6 +143,6 @@ export const MRecAd: MRecAdType = {
142
143
 
143
144
  addAdRevenuePaidListener,
144
145
  removeAdRevenuePaidListener,
145
- }
146
+ };
146
147
 
147
148
  export default MRecAd;
package/src/Privacy.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { NativeModules } from "react-native";
2
- import type { PrivacyType } from "./types/Privacy";
1
+ import { NativeModules } from 'react-native';
2
+ import type { PrivacyType } from './types/Privacy';
3
3
 
4
4
  const { AppLovinMAX } = NativeModules;
5
5
 
package/src/RewardedAd.ts CHANGED
@@ -1,7 +1,8 @@
1
- import { NativeModules } from "react-native";
2
- import { addEventListener, removeEventListener } from "./EventEmitter"
3
- import type { AdDisplayFailedInfo, AdInfo, AdLoadFailedInfo, AdRevenueInfo, AdRewardInfo } from "./types/AdInfo";
4
- import type { RewardedAdType } from "./types/RewardedAd";
1
+ import { NativeModules } from 'react-native';
2
+ import { addEventListener, removeEventListener } from './EventEmitter';
3
+ import type { AdDisplayFailedInfo, AdInfo, AdLoadFailedInfo, AdRevenueInfo, AdRewardInfo } from './types/AdInfo';
4
+ import type { LocalExtraParameterValue } from './types/AdProps';
5
+ import type { RewardedAdType } from './types/RewardedAd';
5
6
 
6
7
  const { AppLovinMAX } = NativeModules;
7
8
 
@@ -18,93 +19,89 @@ const {
18
19
 
19
20
  const isAdReady = (adUnitId: string): Promise<boolean> => {
20
21
  return AppLovinMAX.isRewardedAdReady(adUnitId);
21
- }
22
+ };
22
23
 
23
24
  const loadAd = (adUnitId: string): void => {
24
25
  AppLovinMAX.loadRewardedAd(adUnitId);
25
- }
26
+ };
26
27
 
27
- const showAd = (
28
- adUnitId: string,
29
- placement?: string | null,
30
- customData?: string | null
31
- ): void => {
28
+ const showAd = (adUnitId: string, placement?: string | null, customData?: string | null): void => {
32
29
  AppLovinMAX.showRewardedAd(adUnitId, placement ?? null, customData ?? null);
33
- }
30
+ };
34
31
 
35
- const setExtraParameter = (adUnitId: string, key: string, value: any): void => {
32
+ const setExtraParameter = (adUnitId: string, key: string, value: string | null): void => {
36
33
  AppLovinMAX.setRewardedAdExtraParameter(adUnitId, key, value);
37
- }
34
+ };
38
35
 
39
- const setLocalExtraParameter = (adUnitId: string, key: string, value: any): void => {
36
+ const setLocalExtraParameter = (adUnitId: string, key: string, value: LocalExtraParameterValue): void => {
40
37
  AppLovinMAX.setRewardedAdLocalExtraParameter(adUnitId, { [key]: value });
41
- }
38
+ };
42
39
 
43
40
  const addAdLoadedEventListener = (listener: (adInfo: AdInfo) => void) => {
44
41
  addEventListener(ON_REWARDED_AD_LOADED_EVENT, (adInfo: AdInfo) => listener(adInfo));
45
- }
42
+ };
46
43
 
47
44
  const removeAdLoadedEventListener = () => {
48
45
  removeEventListener(ON_REWARDED_AD_LOADED_EVENT);
49
- }
46
+ };
50
47
 
51
48
  const addAdLoadFailedEventListener = (listener: (errorInfo: AdLoadFailedInfo) => void) => {
52
49
  addEventListener(ON_REWARDED_AD_LOAD_FAILED_EVENT, (errorInfo: AdLoadFailedInfo) => listener(errorInfo));
53
- }
50
+ };
54
51
 
55
52
  const removeAdLoadFailedEventListener = () => {
56
53
  removeEventListener(ON_REWARDED_AD_LOAD_FAILED_EVENT);
57
- }
54
+ };
58
55
 
59
56
  const addAdClickedEventListener = (listener: (adInfo: AdInfo) => void) => {
60
57
  addEventListener(ON_REWARDED_AD_CLICKED_EVENT, (adInfo: AdInfo) => listener(adInfo));
61
- }
58
+ };
62
59
 
63
60
  const removeAdClickedEventListener = () => {
64
61
  removeEventListener(ON_REWARDED_AD_CLICKED_EVENT);
65
- }
62
+ };
66
63
 
67
64
  const addAdDisplayedEventListener = (listener: (adInfo: AdInfo) => void) => {
68
65
  addEventListener(ON_REWARDED_AD_DISPLAYED_EVENT, (adInfo: AdInfo) => listener(adInfo));
69
- }
66
+ };
70
67
 
71
68
  const removeAdDisplayedEventListener = () => {
72
69
  removeEventListener(ON_REWARDED_AD_DISPLAYED_EVENT);
73
- }
70
+ };
74
71
 
75
72
  const addAdFailedToDisplayEventListener = (listener: (errorInfo: AdDisplayFailedInfo) => void) => {
76
73
  addEventListener(ON_REWARDED_AD_FAILED_TO_DISPLAY_EVENT, (errorInfo: AdDisplayFailedInfo) => listener(errorInfo));
77
- }
74
+ };
78
75
 
79
76
  const removeAdFailedToDisplayEventListener = () => {
80
77
  removeEventListener(ON_REWARDED_AD_FAILED_TO_DISPLAY_EVENT);
81
- }
78
+ };
82
79
 
83
80
  const addAdHiddenEventListener = (listener: (adInfo: AdInfo) => void) => {
84
81
  addEventListener(ON_REWARDED_AD_HIDDEN_EVENT, (adInfo: AdInfo) => listener(adInfo));
85
- }
82
+ };
86
83
 
87
84
  const removeAdHiddenEventListener = () => {
88
85
  removeEventListener(ON_REWARDED_AD_HIDDEN_EVENT);
89
- }
86
+ };
90
87
 
91
88
  const addAdRevenuePaidListener = (listener: (adInfo: AdRevenueInfo) => void) => {
92
89
  addEventListener(ON_REWARDED_AD_REVENUE_PAID, (adInfo: AdRevenueInfo) => listener(adInfo));
93
- }
90
+ };
94
91
 
95
92
  const removeAdRevenuePaidListener = () => {
96
93
  removeEventListener(ON_REWARDED_AD_REVENUE_PAID);
97
- }
94
+ };
98
95
 
99
96
  // Rewarded specific APIs
100
97
 
101
98
  const addAdReceivedRewardEventListener = (listener: (adInfo: AdRewardInfo) => void) => {
102
99
  addEventListener(ON_REWARDED_AD_RECEIVED_REWARD_EVENT, (adInfo: AdRewardInfo) => listener(adInfo));
103
- }
100
+ };
104
101
 
105
102
  const removeAdReceivedRewardEventListener = () => {
106
103
  removeEventListener(ON_REWARDED_AD_RECEIVED_REWARD_EVENT);
107
- }
104
+ };
108
105
 
109
106
  export const RewardedAd: RewardedAdType = {
110
107
  isAdReady,
@@ -136,9 +133,9 @@ export const RewardedAd: RewardedAdType = {
136
133
  removeAdRevenuePaidListener,
137
134
 
138
135
  // Rewarded specific APIs
139
-
136
+
140
137
  addAdReceivedRewardEventListener,
141
138
  removeAdReceivedRewardEventListener,
142
- }
139
+ };
143
140
 
144
141
  export default RewardedAd;
@@ -1,4 +1,5 @@
1
- import { NativeModules } from "react-native";
1
+ import { NativeModules } from 'react-native';
2
+ import type { TargetingDataType } from './types/TargetingData';
2
3
 
3
4
  const { AppLovinMAX } = NativeModules;
4
5
 
@@ -43,126 +44,182 @@ export enum UserGender {
43
44
  }
44
45
 
45
46
  /**
46
- * This class allows you to provide user or app data that will improve how we target ads.
47
+ * Defines additional data for the publisher to send to AppLovin.
48
+ *
49
+ * @see {@link https://support.applovin.com/hc/en-us/articles/13964925614733-Data-and-Keyword-Passing}
47
50
  */
48
- export const TargetingData = {
49
-
51
+ export const TargetingData: TargetingDataType = {
50
52
  /**
51
- * Sets the year of birth of the user. Sets 0 to clear this value.
53
+ * Sets the year of birth of the user. Set this to 0 to clear this value.
52
54
  */
53
- set yearOfBirth(value: number) {
54
- nativeMethods.setTargetingDataYearOfBirth(value);
55
+ set yearOfBirth(value: number | Promise<number>) {
56
+ if (typeof value === 'number') {
57
+ nativeMethods.setTargetingDataYearOfBirth(value);
58
+ } else {
59
+ printError('TargetingData.yearOfBirth', 'number', typeof value);
60
+ }
55
61
  },
56
62
 
57
63
  /**
58
- * Gets the year of birth of the user.
64
+ * Gets the year of birth of the user.
59
65
  */
60
- get yearOfBirth(): Promise<number> {
66
+ get yearOfBirth(): number | Promise<number> {
61
67
  return nativeMethods.getTargetingDataYearOfBirth();
62
68
  },
63
69
 
64
70
  /**
65
- * Sets the gender of the user. Sets {UserGender.Unknown} to clear this value.
71
+ * Sets the gender of the user. Set this to {@link UserGender.Unknown} to clear this value.
66
72
  */
67
- set gender(value: UserGender) {
68
- if (value === UserGender.Unknown ||
73
+ set gender(value: UserGender | Promise<UserGender>) {
74
+ if (
75
+ value === UserGender.Unknown ||
69
76
  value === UserGender.Female ||
70
77
  value === UserGender.Male ||
71
- value === UserGender.Other) {
78
+ value === UserGender.Other
79
+ ) {
72
80
  nativeMethods.setTargetingDataGender(value);
81
+ } else {
82
+ printError('TargetingData.gender', 'UserGender', typeof value);
73
83
  }
74
84
  },
75
85
 
76
86
  /**
77
87
  * Gets the gender of the user.
78
88
  */
79
- get gender(): Promise<UserGender> {
89
+ get gender(): UserGender | Promise<UserGender> {
80
90
  return nativeMethods.getTargetingDataGender().then((value: string) => {
81
91
  return value as UserGender;
82
92
  });
83
93
  },
84
94
 
85
95
  /**
86
- * Sets the maximum ad content rating shown to the user. Sets {AdContentRating.None} to clear this value.
96
+ * Sets the maximum ad content rating shown to the user. The levels are based on IQG Media
97
+ * Ratings: 1=All Audiences, 2=Everyone Over 12, 3=Mature Audiences.
98
+ * Set this to {@link AdContentRating.None} to clear this value.
87
99
  */
88
- set maximumAdContentRating(value: AdContentRating) {
89
- if (value === AdContentRating.None ||
100
+ set maximumAdContentRating(value: AdContentRating | Promise<AdContentRating>) {
101
+ if (
102
+ value === AdContentRating.None ||
90
103
  value === AdContentRating.AllAudiences ||
91
104
  value === AdContentRating.EveryoneOverTwelve ||
92
- value === AdContentRating.MatureAudiences) {
105
+ value === AdContentRating.MatureAudiences
106
+ ) {
93
107
  nativeMethods.setTargetingDataMaximumAdContentRating(value);
108
+ } else {
109
+ printError('TargetingData.maximumAdContentRating', 'AdContentRating', typeof value);
94
110
  }
95
111
  },
96
112
 
97
113
  /**
98
- * Gets the maximum ad content rating shown to the user.
114
+ * Gets the maximum ad content rating shown to the user. The levels are based on IQG Media
115
+ * Ratings: 1=All Audiences, 2=Everyone Over 12, 3=Mature Audiences.
99
116
  */
100
- get maximumAdContentRating(): Promise<AdContentRating> {
117
+ get maximumAdContentRating(): AdContentRating | Promise<AdContentRating> {
101
118
  return nativeMethods.getTargetingDataMaximumAdContentRating().then((value: number) => {
102
119
  return value as AdContentRating;
103
120
  });
104
121
  },
105
122
 
106
123
  /**
107
- * Sets the email of the user. Sets null to clear this value.
124
+ * Sets the email of the user. Set this to null to clear this value.
108
125
  */
109
- set email(value: string | null) {
110
- nativeMethods.setTargetingDataEmail(value);
126
+ set email(value: string | null | Promise<string | null>) {
127
+ if (value === null) {
128
+ nativeMethods.setTargetingDataEmail(null);
129
+ } else if (typeof value === 'string') {
130
+ nativeMethods.setTargetingDataEmail(value as string);
131
+ } else {
132
+ printError('TargetingData.email', 'string or null', typeof value);
133
+ }
111
134
  },
112
135
 
113
136
  /**
114
137
  * Gets the email of the user.
115
138
  */
116
- get email(): Promise<string | null> {
139
+ get email(): string | null | Promise<string | null> {
117
140
  return nativeMethods.getTargetingDataEmail();
118
141
  },
119
142
 
120
143
  /**
121
- * Sets the phone number of the user. Sets null to clear this value.
144
+ * Sets the phone number of the user. Set this to null to clear this value.
122
145
  */
123
- set phoneNumber(value: string | null) {
124
- nativeMethods.setTargetingDataPhoneNumber(value);
146
+ set phoneNumber(value: string | null | Promise<string | null>) {
147
+ if (value === null) {
148
+ nativeMethods.setTargetingDataPhoneNumber(null);
149
+ } else if (typeof value === 'string') {
150
+ nativeMethods.setTargetingDataPhoneNumber(value as string);
151
+ } else {
152
+ printError('TargetingData.phoneNumber', 'string or null', typeof value);
153
+ }
125
154
  },
126
155
 
127
156
  /**
128
157
  * Gets the phone number of the user.
129
158
  */
130
- get phoneNumber(): Promise<string | null> {
159
+ get phoneNumber(): string | null | Promise<string | null> {
131
160
  return nativeMethods.getTargetingDataPhoneNumber();
132
161
  },
133
162
 
134
163
  /**
135
- * Sets the keywords describing the application. Sets null to clear this value.
164
+ * Sets the keywords describing the application. Set this to null to clear this value.
136
165
  */
137
- set keywords(value: string[] | null) {
138
- nativeMethods.setTargetingDataKeywords(value);
166
+ set keywords(value: string[] | null | Promise<string[] | null>) {
167
+ if (value === null) {
168
+ nativeMethods.setTargetingDataKeywords(null);
169
+ } else if (isStringArray(value)) {
170
+ nativeMethods.setTargetingDataKeywords(value as string[]);
171
+ } else {
172
+ printError('TargetingData.keywords', 'string[] or null', typeof value);
173
+ }
139
174
  },
140
175
 
141
176
  /**
142
177
  * Gets the keywords describing the application.
143
178
  */
144
- get keywords(): Promise<string[] | null> {
179
+ get keywords(): string[] | null | Promise<string[] | null> {
145
180
  return nativeMethods.getTargetingDataKeywords();
146
181
  },
147
182
 
148
183
  /**
149
- * Sets the interests of the user. Sets null to clear this value.
184
+ * Sets the interests of the user. Set this to null to clear this value.
150
185
  */
151
- set interests(value: string[] | null) {
152
- nativeMethods.setTargetingDataInterests(value);
186
+ set interests(value: string[] | null | Promise<string[] | null>) {
187
+ if (value === null) {
188
+ nativeMethods.setTargetingDataInterests(null);
189
+ } else if (isStringArray(value)) {
190
+ nativeMethods.setTargetingDataInterests(value as string[]);
191
+ } else {
192
+ printError('TargetingData.interests', 'string[] or null', typeof value);
193
+ }
153
194
  },
154
195
 
155
196
  /**
156
197
  * Gets the interests of the user.
157
198
  */
158
- get interests(): Promise<string[] | null> {
199
+ get interests(): string[] | null | Promise<string[] | null> {
159
200
  return nativeMethods.getTargetingDataInterests();
160
201
  },
161
202
 
162
203
  /**
163
- * Clear all saved data from this class.
204
+ * Clears all saved data from this class.
164
205
  */
165
206
  clearAll(): void {
166
207
  nativeMethods.clearAllTargetingData();
167
208
  },
168
- }
209
+ };
210
+
211
+ const isStringArray = (strs: object): boolean => {
212
+ return Array.isArray(strs) && strs.every((value) => typeof value === 'string');
213
+ };
214
+
215
+ const printError = (fieldName: string, correctType: string, wrongType: string) => {
216
+ console.error(
217
+ 'Cannot set value to ' +
218
+ fieldName +
219
+ ' with unsupported type: ' +
220
+ wrongType +
221
+ '. Value has to be of type ' +
222
+ correctType +
223
+ '.'
224
+ );
225
+ };