Skip to content

Commit 9a9ce2a

Browse files
committed
Add sessions to web tracking, add overrideable device id
1 parent 52a9c9b commit 9a9ce2a

File tree

6 files changed

+89
-21
lines changed

6 files changed

+89
-21
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Amplitude-Javascript
77

88
<script type="text/javascript">
99
(function(h,a){var f=h.amplitude||{};var b=a.createElement("script");b.type="text/javascript";
10-
b.async=true;b.src="https://d24n15hnbwhuhn.cloudfront.net/libs/amplitude-1.2-min.js";
10+
b.async=true;b.src="https://d24n15hnbwhuhn.cloudfront.net/libs/amplitude-1.3-min.js";
1111
var g=a.getElementsByTagName("script")[0];g.parentNode.insertBefore(b,g);
1212
f._q=[];function e(i){f[i]=function(){f._q.push([i].concat(Array.prototype.slice.call(arguments,0)))}}
1313
var c=["init","logEvent","setUserId","setUserProperties","setVersionName","setDomain","setGlobalUserProperties"];

src/amplitude-snippet.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
var as = document.createElement('script');
1010
as.type = 'text/javascript';
1111
as.async = true;
12-
as.src = 'https://d24n15hnbwhuhn.cloudfront.net/libs/amplitude-1.2-min.js';
12+
as.src = 'https://d24n15hnbwhuhn.cloudfront.net/libs/amplitude-1.3-min.js';
1313
var s = document.getElementsByTagName('script')[0];
1414
s.parentNode.insertBefore(as, s);
1515
amplitude._q = [];
@@ -21,6 +21,6 @@
2121
var funcs = ["init", "logEvent", "setUserId", "setUserProperties", "setVersionName", "setDomain", "setGlobalUserProperties"];
2222
for (var i = 0; i < funcs.length; i++) {
2323
proxy(funcs[i]);
24-
};
24+
}
2525
window.amplitude = amplitude;
2626
})(window, document);

src/amplitude.js

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1001,7 +1001,7 @@
10011001
* Amplitude API
10021002
*/
10031003
var Amplitude = function() {};
1004-
Amplitude.SDK_VERSION = "1.2";
1004+
Amplitude.SDK_VERSION = "1.3";
10051005
Amplitude.API_VERSION = 2;
10061006

10071007
var options = {
@@ -1010,12 +1010,19 @@
10101010
cookieExpiration: 365 * 10,
10111011
unsentKey: 'amplitude_unsent',
10121012
saveEvents: true,
1013-
domain: ''
1013+
domain: '',
1014+
sessionTimeout: 30 * 60 * 1000
10141015
};
10151016

10161017
var eventId = 0;
10171018
var unsentEvents = [];
10181019
var sending = false;
1020+
var lastEventTime = null;
1021+
var sessionId = null;
1022+
var LocalStorageKeys = {
1023+
LAST_EVENT_TIME: 'amplitude_lastEventTime',
1024+
SESSION_ID: 'amplitude_sessionId'
1025+
};
10191026

10201027
var nextEventId = function() {
10211028
eventId++;
@@ -1041,7 +1048,8 @@
10411048

10421049
loadCookieData();
10431050

1044-
options.deviceId = options.deviceId || UUID();
1051+
options.deviceId = (opt_config.deviceId !== undefined && opt_config.deviceId !== null && opt_config.deviceId) ||
1052+
options.deviceId || UUID();
10451053
options.userId = (opt_userId !== undefined && opt_userId !== null && opt_userId) || options.userId || null;
10461054
saveCookieData();
10471055

@@ -1062,6 +1070,16 @@
10621070
if (unsentEvents.length > 0) {
10631071
this.sendEvents();
10641072
}
1073+
1074+
lastEventTime = parseInt(localStorage.getItem(LocalStorageKeys.LAST_EVENT_TIME)) || null;
1075+
sessionId = parseInt(localStorage.getItem(LocalStorageKeys.SESSION_ID)) || null;
1076+
var now = new Date().getTime();
1077+
if (!sessionId || !lastEventTime || now - lastEventTime > options.sessionTimeout) {
1078+
sessionId = now;
1079+
localStorage.setItem(LocalStorageKeys.SESSION_ID, sessionId);
1080+
}
1081+
lastEventTime = now;
1082+
localStorage.setItem(LocalStorageKeys.LAST_EVENT_TIME, lastEventTime);
10651083
} catch (e) {
10661084
log(e);
10671085
}
@@ -1150,13 +1168,19 @@
11501168
Amplitude.prototype.logEvent = function(eventType, eventProperties) {
11511169
try {
11521170
var eventTime = new Date().getTime();
1171+
if (!sessionId || !lastEventTime || eventTime - lastEventTime > options.sessionTimeout) {
1172+
sessionId = eventTime;
1173+
localStorage.setItem(LocalStorageKeys.SESSION_ID, sessionId);
1174+
}
1175+
lastEventTime = eventTime;
1176+
localStorage.setItem(LocalStorageKeys.LAST_EVENT_TIME, lastEventTime);
11531177
eventProperties = eventProperties || {};
11541178
var event = {
11551179
device_id: options.deviceId,
11561180
user_id: options.userId || options.deviceId,
11571181
timestamp: eventTime,
11581182
event_id: nextEventId(),
1159-
session_id: -1,
1183+
session_id: sessionId || -1,
11601184
event_type: eventType,
11611185
// api_properties: {
11621186
// location: this.getLocation()
@@ -1227,6 +1251,8 @@
12271251
*/
12281252
Amplitude.prototype.setGlobalUserProperties = Amplitude.prototype.setUserProperties;
12291253

1254+
Amplitude.prototype.__VERSION__ = '1.3.0';
1255+
12301256
var old = window.amplitude || {};
12311257
var q = old._q || [];
12321258
var instance = new Amplitude();

test/amplitudejs.html

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,41 @@
11
<html>
2-
<script>
3-
(function(h,a){var f=h.amplitude||{};var b=a.createElement("script");b.type="text/javascript";b.async=true;b.src="https://d24n15hnbwhuhn.cloudfront.net/libs/amplitude-1.2-min.js";var g=a.getElementsByTagName("script")[0];g.parentNode.insertBefore(b,g);f._q=[];function e(i){f[i]=function(){f._q.push([i].concat(Array.prototype.slice.call(arguments,0)))}}var c=["init","logEvent","setUserId","setUserProperties","setVersionName","setDomain","setGlobalUserProperties"];for(var d=0;d<c.length;d++){e(c[d])}h.amplitude=f})(window,document);
4-
amplitude.init('a2dbce0e18dfe5f8e74493843ff5c053');
5-
amplitude.setVersionName('Web');
6-
//amplitude.logEvent('pageLoad');
7-
</script>
8-
<body>
9-
<h3>Amplitude JS Test</h3>
10-
<ul>
11-
<li><a href="javascript:amplitude.setUserId('user01');">Set user ID</a></li>
12-
<li><a href="javascript:amplitude.logEvent('clicked');">Log event</a></li>
13-
<li><a href="javascript:amplitude.logEvent('clicked button', {color: 'red;', shape: 'triangle', sides: 3});">Log event with event properties</a></li>
14-
<li><a href="javascript:amplitude.setUserProperties({age: 30, city: 'San Francisco, CA'});">Set user properties</a></li>
15-
</body>
2+
<!--<script src="src/amplitude-snippet.js" type="text/javascript"></script>-->
3+
<script>
4+
(function(window, document) {
5+
var amplitude = window.amplitude || {};
6+
var as = document.createElement('script');
7+
as.type = 'text/javascript';
8+
as.async = true;
9+
as.src = 'src/amplitude.js';
10+
var s = document.getElementsByTagName('script')[0];
11+
s.parentNode.insertBefore(as, s);
12+
amplitude._q = [];
13+
function proxy(fn) {
14+
amplitude[fn] = function() {
15+
amplitude._q.push([fn].concat(Array.prototype.slice.call(arguments, 0)));
16+
};
17+
}
18+
19+
var funcs = ["init", "logEvent", "setUserId", "setUserProperties", "setVersionName", "setDomain", "setGlobalUserProperties"];
20+
for (var i = 0; i < funcs.length; i++) {
21+
proxy(funcs[i]);
22+
}
23+
window.amplitude = amplitude;
24+
})(window, document);
25+
</script>
26+
<script>
27+
amplitude.init('a2dbce0e18dfe5f8e74493843ff5c053');
28+
amplitude.setVersionName('Web');
29+
//amplitude.logEvent('pageLoad');
30+
</script>
31+
<body>
32+
<h3>Amplitude JS Test</h3>
33+
<ul>
34+
<li><a href="javascript:amplitude.setUserId('user01');">Set user ID</a></li>
35+
<li><a href="javascript:amplitude.logEvent('clicked');">Log event</a></li>
36+
<li><a href="javascript:amplitude.logEvent('clicked button', {color: 'red;', shape: 'triangle', sides: 3});">Log
37+
event with event properties</a></li>
38+
<li><a href="javascript:amplitude.setUserProperties({age: 30, city: 'San Francisco, CA'});">Set user properties</a>
39+
</li>
40+
</body>
1641
</html>

test/package.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"name": "amplitude-javascript-test",
3+
"description": "Amplitude Javascript SDK Test",
4+
"version": "0.0.1",
5+
"private": true,
6+
"dependencies": {
7+
"express": "4.x"
8+
}
9+
}

test/server.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
var express = require('express');
2+
var server = express();
3+
4+
server.use('/src', express.static(__dirname + '/../src'));
5+
server.use(express.static(__dirname));
6+
var port = 9000;
7+
server.listen(port);
8+
console.log('Listening on port ' + port + '...');

0 commit comments

Comments
 (0)