Skip to content

Commit 02d65e7

Browse files
Added trackCustomDimension method for track custom dimension
1 parent 80f65f3 commit 02d65e7

File tree

6 files changed

+80
-3
lines changed

6 files changed

+80
-3
lines changed

README.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,22 @@ trackCampaign("Home screen","https://example.com/?mtm_campaign=2020_august_promo
349349

350350
```
351351

352+
### trackCustomDimension()
353+
354+
With Custom Dimensions you can assign any custom data to your visitors or actions (like pages, events, site search, ...) and then visualize the reports of how many visits, conversions, pageviews, etc. there were for each Custom Dimension.
355+
356+
Dimension contains a key and a value, and where the key is a custom dimension id created on the Matomo dashboard and the value should be a string, you'll need to ensure that the dimensions array is processed correctly. [create custom dimension](https://matomo.org/faq/reporting-tools/create-track-and-manage-custom-dimensions/)
357+
358+
#### Examples
359+
360+
```js
361+
362+
trackCustomDimension({
363+
dimensions:[{key:"1",value: "cf7fad2e-fae4-4c49-9924-ad9a2a7c50de"},{key:"2",value: "cf7fad2e-fae4-4c49-9924-ad9a2a7c50de"}]
364+
});
365+
366+
```
367+
352368
## Methods
353369

354370

@@ -371,6 +387,7 @@ trackCampaign("Home screen","https://example.com/?mtm_campaign=2020_august_promo
371387
| [setLogger](#setlogger) | - |||||
372388
| [trackMediaEvent](#trackmediaevent) | siteId: String, mediaId: String, mediaTitle: String, playerName: String, mediaType: String, mediaResource: String, mediaStatus: String,mediaLength?:String, mediaProgress?:String, mediaTTP?: String, mediaWidth?: String, mediaHeight?: String, mediaSE?: String, mediaFullScreen?:String, dimensions : [object] |||||
373389
| [trackCampaign](#trackcampaign) | title: String, campaignUrl: String |||||
390+
| [trackCustomDimension](#trackcustomdimension) | dimensions:[{key:string,value:string}] |||||
374391

375392

376393
<!-- ## Contributing

android/src/main/java/com/logicwind/reactnativematomotracker/ReactNativeMatomoTrackerModule.kt

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,28 @@ class ReactNativeMatomoTrackerModule(reactContext: ReactApplicationContext) :
245245
}
246246
}
247247

248-
248+
@ReactMethod
249+
fun trackCustomDimension(
250+
dimensions: ReadableArray
251+
) {
252+
if (dimensions.size() > 0) {
253+
for (i in 0 until dimensions.size()) {
254+
val dimension = dimensions.getMap(i)
255+
val key = dimension?.getString("key")
256+
val value = dimension?.getString("value")
257+
if (key != null && value != null) {
258+
259+
val id = key.toIntOrNull()
260+
if (id != null) {
261+
TrackHelper.track().screen("/customDimension").dimension(id,value).with(tracker)
262+
trackDispatch();
263+
} else {
264+
println("Key could not be converted to an Int")
265+
}
266+
}
267+
}
268+
}
269+
}
249270
@ReactMethod
250271
fun trackMedia(
251272
siteId: String,

example/src/App.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import {
1919
setVisitorId,
2020
startSession,
2121
trackCampaign,
22+
trackCustomDimension,
2223
trackDispatch,
2324
trackDownload,
2425
trackEvent,
@@ -186,13 +187,24 @@ export default function App() {
186187
style={styles.button}
187188
onPress={() => {
188189
trackMediaEvent({ siteId: "siteId", mediaId: Date.now.toString(), mediaTitle: "video media play track", playerName: "test 08", mediaType: MediaType.VIDEO, mediaResource: "http://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4", mediaStatus: "100", mediaLength: "100", mediaFullScreen: "1", mediaHeight: "720", mediaWidth: "1080", mediaProgress: "100",
189-
dimensions:[{key:"dimension1",value: "cf7fad2e-fae4-4c49-9924-ad9a2a7c50de"}]
190+
dimensions:[{key:"1",value: "cf7fad2e-fae4-4c49-9924-ad9a2a7c50de"}]
190191
});
191192
}}
192193
>
193194
<Text style={styles.buttonText}>Video Play Stop</Text>
194195
</Pressable>
195196

197+
<Pressable
198+
style={styles.button}
199+
onPress={() => {
200+
trackCustomDimension({
201+
dimensions:[{key:"1",value: "cf7fad2e-fae4-4c49-9924-ad9a2a7c50de"},{key:"2",value: "cf7fad2e-fae4-4c49-9924-ad9a2a7c50de"}]
202+
});
203+
}}
204+
>
205+
<Text style={styles.buttonText}>Track Custom Dimension</Text>
206+
</Pressable>
207+
196208
<Pressable
197209
style={styles.button}
198210
onPress={() => {

ios/ReactNativeMatomoTracker.mm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ @interface RCT_EXTERN_MODULE(ReactNativeMatomoTracker, NSObject)
4343

4444
RCT_EXTERN_METHOD(trackMedia:(NSString *)siteId withMediaId:(NSString *)mediaId withMediaTitle:(NSString *)mediaTitle withPlayerName:(NSString *)playerName withMediaType:(NSString *)mediaType withMediaResource:(NSString *)mediaResource withMediaStatus:(NSString *)mediaStatus withMediaLength:(NSString *)mediaLength withMediaProgress:(NSString *)mediaProgress withMediaTTP:(NSString *)mediaTTP withMediaWidth:(NSString *)mediaWidth withMediaHeight:(NSString *)mediaHeight withMediaSE:(NSString *)mediaSE withMediaFullScreen:(NSString *)mediaFullScreen withDimensions:(NSArray<NSDictionary *> *)dimensions)
4545

46-
46+
RCT_EXTERN_METHOD(trackCustomDimension:(NSArray<NSDictionary *> *)dimensions)
4747

4848
+ (BOOL)requiresMainQueueSetup
4949
{

ios/ReactNativeMatomoTracker.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,25 @@ class ReactNativeMatomoTracker: NSObject {
157157
}
158158

159159

160+
@objc(trackCustomDimension:)
161+
func trackCustomDimension(
162+
dimensions:[NSDictionary]
163+
) {
164+
if(!dimensions.isEmpty){
165+
matomoTracker?.track(view: ["customDimension"])
166+
for dimension in dimensions {
167+
if let key = dimension["key"] as? String, let value = dimension["value"] as? String {
168+
if let id = Int(key) {
169+
matomoTracker?.setDimension(value, forIndex: id)
170+
matomoTracker?.dispatch()
171+
} else {
172+
print("Key could not be converted to an Int")
173+
}
174+
}
175+
}
176+
}
177+
}
178+
160179
@objc(trackMedia:withMediaId:withMediaTitle:withPlayerName:withMediaType:withMediaResource:withMediaStatus:withMediaLength:withMediaProgress:withMediaTTP:withMediaWidth:withMediaHeight:withMediaSE:withMediaFullScreen:withDimensions:)
161180
func trackMediaEvent(
162181
siteId: String,

src/index.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,14 @@ export function trackMediaEvent(
104104
return ReactNativeMatomoTracker.trackMedia(siteId,mediaId,mediaTitle,playerName,mediaType,mediaResource,mediaStatus,mediaLength,mediaProgress,mediaTTP,mediaWidth,mediaHeight,mediaSE,mediaFullScreen,dimensions);
105105
}
106106

107+
export function trackCustomDimension(
108+
{dimensions=[]}:{
109+
dimensions?: Array<Object>
110+
}): Promise<number> {
111+
return ReactNativeMatomoTracker.trackCustomDimension(dimensions);
112+
}
113+
114+
107115
export const MediaType = { VIDEO: 'video',AUDIO:"audio"};
108116

109117

0 commit comments

Comments
 (0)