Skip to content

Commit c9aa991

Browse files
authored
Merge pull request #3 from logicwind/dev
added the setIsOptedOut and setLogger method
2 parents 0f840fd + 581e264 commit c9aa991

File tree

10 files changed

+1210
-928
lines changed

10 files changed

+1210
-928
lines changed

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ else{
5555
setVisitorId("2c534f55fba6cf6e")
5656
}
5757

58+
setIsOptedOut(true)
59+
60+
setLogger()
61+
5862
trackDispatch()
5963

6064
```
@@ -67,6 +71,7 @@ trackDispatch()
6771
| Name | Description |
6872
|-----------------|-----------------|
6973
| createTracker | The createTracker function is used to instantiate a tracker object for Matomo analytics within a React Native application. This tracker instance allows developers to track various user interactions and events within their mobile app. |
74+
| startSession | The startSession method is used to start a new session explicitly within a React Native application.|
7075
| trackScreen | The trackScreen method is used to track screen views within a React Native application. Screen tracking allows developers to monitor user navigation and engagement by recording when users view specific screens or pages within the app.|
7176
| trackEvent | The trackEvent method is used to track custom events within a React Native application. Event tracking allows developers to monitor and analyze user interactions, such as button clicks, form submissions, or any other custom actions performed by users within the app. |
7277
| trackOutlink | The trackOutlink method is used to track clicks on outbound links within a React Native application. Outbound link tracking allows developers to monitor when users click on links that navigate them away from the app to external websites or resources. |
@@ -77,6 +82,9 @@ trackDispatch()
7782
| setUserId | The setUserId function is used to assign a unique identifier to a user in a React Native application. This identifier can be used to track user-specific actions, behavior, and engagement within the app. |
7883
| setVisitorId | The setVisitorId function allows you to manually set a custom visitor ID for tracking purposes within a React Native application. |
7984
| trackDispatch | The trackDispatch methods for tracking events, interactions, and other analytics-related functionalities within a React Native application. However, there isn't a standard trackDispatch method in Matomo tracking libraries, including the one provided by this package |
85+
| setIsOptedOut | setIsOptedOut method for disabling Matomo tracking in a React Native application. |
86+
| setLogger | setLogger method use for set up logging for Matomo SDK |
87+
8088

8189
<!-- ## Contributing
8290

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

Lines changed: 65 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class ReactNativeMatomoTrackerModule(reactContext: ReactApplicationContext) :
3030
fun setTracker(uri:String,siteId: Int) {
3131
if (tracker == null) {
3232
try {
33-
Timber.plant(Timber.DebugTree())
33+
3434
tracker = TrackerBuilder.createDefault(uri, siteId)
3535
.build(mMatomoTracker)
3636
Log.e(TAG, "initialized successfully! ${tracker}")
@@ -43,84 +43,128 @@ class ReactNativeMatomoTrackerModule(reactContext: ReactApplicationContext) :
4343
}
4444

4545

46+
47+
4648
// Example method
4749
// See https://reactnative.dev/docs/native-modules-android
50+
51+
@ReactMethod
52+
fun startSession() {
53+
tracker?.startNewSession()
54+
}
55+
4856
@ReactMethod
4957
fun createTracker(uri:String,siteId:Int) {
5058
setTracker(uri,siteId)
5159
}
5260

5361
@ReactMethod
5462
fun trackScreen(screenName:String,title:String) {
55-
TrackHelper.track().screen(screenName).title(title).with(tracker)
56-
63+
if (tracker != null) {
64+
TrackHelper.track().screen(screenName).title(title).with(tracker)
65+
}
5766
}
5867

5968
@ReactMethod
6069
fun trackEvent(category:String,action:String,name:String,value:Float) {
61-
TrackHelper.track().event(category, action).name(name).value(value).with(tracker)
62-
70+
if (tracker != null) {
71+
TrackHelper.track().event(category, action).name(name).value(value).with(tracker)
72+
}
6373
}
6474
@ReactMethod
6575
fun trackDispatch() {
66-
tracker?.dispatch()
76+
if (tracker != null) {
77+
tracker?.dispatch()
78+
}
6779
}
6880

6981

7082
@ReactMethod
7183
fun trackOutlink(url:String) {
7284
val validUrl = URL(url)
73-
TrackHelper.track()
74-
.outlink(validUrl)
75-
.with(tracker)
85+
if (tracker != null) {
86+
TrackHelper.track()
87+
.outlink(validUrl)
88+
.with(tracker);
89+
}
7690
}
7791

7892
@ReactMethod
7993
fun trackSearch(keyword:String) {
94+
if (tracker != null) {
8095
TrackHelper.track()
8196
.search(keyword)
82-
.with(tracker)
97+
.with(tracker);
98+
}
8399
}
84100

85101
@ReactMethod
86102
fun trackImpression(contentName:String) {
87-
TrackHelper.track()
88-
.impression(contentName)
89-
.with(tracker)
103+
if (tracker != null) {
104+
TrackHelper.track()
105+
.impression(contentName)
106+
.with(tracker);
107+
}
90108
}
91109

92110

93111
@ReactMethod
94112
fun trackInteraction(contentName:String,contentInteraction:String) {
95-
TrackHelper.track()
96-
.interaction(contentName, contentInteraction)
97-
.with(tracker)
113+
if (tracker != null) {
114+
TrackHelper.track()
115+
.interaction(contentName, contentInteraction)
116+
.with(tracker)
117+
}
98118
}
99119

100120
@ReactMethod
101121
fun trackDownload(category: String,action: String,url: String) {
102-
TrackHelper.track().event(category, action).name(url).with(tracker)
122+
if (tracker != null) {
123+
TrackHelper.track().event(category, action).name(url).with(tracker);
103124
// TrackHelper.track().download().with(tracker);
125+
}
104126
}
105127

106128
@ReactMethod
107129
fun setUserId(id:String) {
108-
tracker?.setUserId(id);
130+
if (tracker != null) {
131+
tracker?.setUserId(id);
132+
}
109133
}
110134

111135
@ReactMethod
112136
fun trackScreens() {
113-
TrackHelper.track().screens(Application()).with(tracker);
137+
if (tracker != null) {
138+
TrackHelper.track().screens(Application()).with(tracker);
139+
}
114140
}
115141

116142
@ReactMethod
117143
fun trackGoal(goalId:Int,revenue:Float) {
118-
TrackHelper.track().goal(goalId).revenue(revenue).with(tracker);
144+
if (tracker != null) {
145+
TrackHelper.track().goal(goalId).revenue(revenue).with(tracker);
146+
}
119147
}
120148

121149
@ReactMethod
122150
fun setVisitorId(visitorId:String) {
123-
tracker?.setVisitorId(visitorId)
151+
if (tracker != null) {
152+
tracker?.setVisitorId(visitorId);
153+
}
154+
}
155+
156+
@ReactMethod
157+
fun setLogger() {
158+
Timber.plant(Timber.DebugTree())
159+
}
160+
161+
162+
@ReactMethod
163+
fun setIsOptedOut(isOptedOut:Boolean) {
164+
Log.e(TAG, "An error occurred: ${isOptedOut}")
165+
if (tracker != null) {
166+
tracker?.setOptOut(isOptedOut);
167+
}
124168
}
125169

126170

example/ios/Podfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ PODS:
77
- hermes-engine (0.74.1):
88
- hermes-engine/Pre-built (= 0.74.1)
99
- hermes-engine/Pre-built (0.74.1)
10-
- logicwind-react-native-matomo-tracker (0.1.0):
10+
- logicwind-react-native-matomo-tracker (0.2.1):
1111
- DoubleConversion
1212
- glog
1313
- hermes-engine
@@ -1376,7 +1376,7 @@ SPEC CHECKSUMS:
13761376
fmt: 4c2741a687cc09f0634a2e2c72a838b99f1ff120
13771377
glog: c5d68082e772fa1c511173d6b30a9de2c05a69a2
13781378
hermes-engine: 16b8530de1b383cdada1476cf52d1b52f0692cbc
1379-
logicwind-react-native-matomo-tracker: 5bd2647580668c8da39ae3f2b396d098c022de10
1379+
logicwind-react-native-matomo-tracker: cb7577a2f7dca6f646620a44c45f2aca91c3e65b
13801380
MatomoTracker: 1f3772a41c27393067d0126071afe6ae1c7f739e
13811381
RCT-Folly: 02617c592a293bd6d418e0a88ff4ee1f88329b47
13821382
RCTDeprecation: efb313d8126259e9294dc4ee0002f44a6f676aba
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>IDEDidComputeMac32BitWarning</key>
6+
<true/>
7+
</dict>
8+
</plist>

example/src/App.tsx

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,11 @@ import {
1212

1313
import {
1414
createTracker,
15+
setIsOptedOut,
16+
setLogger,
1517
setUserId,
1618
setVisitorId,
19+
startSession,
1720
trackDispatch,
1821
trackDownload,
1922
trackEvent,
@@ -22,24 +25,36 @@ import {
2225
trackOutlink,
2326
trackScreen,
2427
trackSearch,
28+
2529
} from '@logicwind/react-native-matomo-tracker';
2630

2731
export default function App() {
2832
const [result] = React.useState<number | undefined>();
2933

34+
const [optedOut,setOptedOut]=React.useState(false)
35+
3036
React.useEffect(() => {
31-
createTracker('your-matomo-url', 1); //Replace 1 with your matomo site id
37+
createTracker("https://matomo.cappital.co/matomo.php",43) //Replace 1 with your matomo site id
3238
}, []);
3339

3440
return (
3541
<SafeAreaView style={styles.main}>
3642
<ScrollView showsHorizontalScrollIndicator={false}>
3743
<View style={styles.container}>
3844
<Text>Matomo Tracking {result}</Text>
45+
<Pressable
46+
style={styles.button}
47+
onPress={() => {
48+
startSession()
49+
}}
50+
>
51+
<Text style={styles.buttonText}>Start Session</Text>
52+
</Pressable>
3953
<Pressable
4054
style={styles.button}
4155
onPress={() => {
4256
trackScreen('HomeScreen', 'This is test home screen');
57+
4358
}}
4459
>
4560
<Text style={styles.buttonText}>Track Screen</Text>
@@ -133,6 +148,25 @@ export default function App() {
133148
<Text style={styles.buttonText}>Set Visistor Id</Text>
134149
</Pressable>
135150

151+
<Pressable
152+
style={styles.button}
153+
onPress={() => {
154+
setIsOptedOut(!optedOut)
155+
setOptedOut(!optedOut)
156+
}}
157+
>
158+
<Text style={styles.buttonText}>Set Is OptedOut {optedOut?"NO":"OFF"}</Text>
159+
</Pressable>
160+
161+
<Pressable
162+
style={styles.button}
163+
onPress={() => {
164+
setLogger()
165+
}}
166+
>
167+
<Text style={styles.buttonText}>Set Logger</Text>
168+
</Pressable>
169+
136170
<Pressable
137171
style={styles.button}
138172
onPress={() => {

ios/ReactNativeMatomoTracker.mm

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ @interface RCT_EXTERN_MODULE(ReactNativeMatomoTracker, NSObject)
99

1010
RCT_EXTERN_METHOD(trackDispatch)
1111

12-
RCT_EXTERN_METHOD(trackEvent:(NSString *)category withAction:(NSString *)action withName:(NSString *)name withValue:(NSString *)value)
12+
RCT_EXTERN_METHOD(trackEvent:(NSString *)category withAction:(NSString *)action withName:(NSString *)name withValue:(NSNumber *)value)
1313

1414
RCT_EXTERN_METHOD(trackOutlink:(NSString *)url)
1515

@@ -29,6 +29,13 @@ @interface RCT_EXTERN_MODULE(ReactNativeMatomoTracker, NSObject)
2929

3030
RCT_EXTERN_METHOD(setVisitorId:(NSString *)id)
3131

32+
RCT_EXTERN_METHOD(setIsOptedOut:(BOOL)isOptedOut)
33+
34+
RCT_EXTERN_METHOD(setLogger)
35+
36+
RCT_EXTERN_METHOD(startSession)
37+
38+
3239
+ (BOOL)requiresMainQueueSetup
3340
{
3441
return NO;

ios/ReactNativeMatomoTracker.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,13 @@ class ReactNativeMatomoTracker: NSObject {
2121
matomoTracker = MatomoTracker(siteId: siteId, queue: queue, dispatcher: dispatcher)
2222

2323
}
24+
2425

26+
@objc(startSession)
27+
func startSession() {
28+
matomoTracker?.startNewSession()
29+
}
30+
2531

2632
@objc(trackScreen:withTitle:)
2733
func trackScreen(screenName: String, title: String) {
@@ -85,4 +91,17 @@ class ReactNativeMatomoTracker: NSObject {
8591
func setVisitorId(id:String) {
8692
matomoTracker?.forcedVisitorId=id
8793
}
94+
95+
@objc(setIsOptedOut:)
96+
func setIsOptedOut(isOptedOut:Bool) {
97+
matomoTracker?.isOptedOut = isOptedOut;
98+
}
99+
100+
@objc(setLogger)
101+
func setLogger() {
102+
matomoTracker?.logger = DefaultLogger(minLevel: .verbose)
103+
104+
}
105+
106+
88107
}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@logicwind/react-native-matomo-tracker",
3-
"version": "0.2.1",
3+
"version": "0.2.2",
44
"description": "React-native plugin for matomo analytics",
55
"main": "lib/commonjs/index",
66
"module": "lib/module/index",

src/index.tsx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,19 @@ export function setUserId(id:String): Promise<number> {
6060
export function setVisitorId(visitorId:String): Promise<number> {
6161
return ReactNativeMatomoTracker.setVisitorId(visitorId);
6262
}
63+
64+
export function setIsOptedOut(isOptedOut:boolean): Promise<number> {
65+
return ReactNativeMatomoTracker.setIsOptedOut(isOptedOut);
66+
}
67+
68+
export function setLogger(): Promise<number> {
69+
return ReactNativeMatomoTracker.setLogger();
70+
}
71+
72+
export function startSession(): Promise<number> {
73+
return ReactNativeMatomoTracker.startSession();
74+
}
75+
76+
77+
78+

0 commit comments

Comments
 (0)