mirror of
https://github.com/scratchfoundation/scratchjr.git
synced 2025-03-26 12:50:52 -04:00
Merge pull request #260 from benjiwheeler/analytics
Add more analytics events, and use action as event type
This commit is contained in:
commit
dc8990f9ab
9 changed files with 27 additions and 10 deletions
android/ScratchJr/app/src/main/java/org/scratchjr/android
ios/ScratchJr/src
src
|
@ -507,10 +507,9 @@ public class ScratchJrActivity
|
|||
*/
|
||||
public void logAnalyticsEvent(String category, String action, String label) {
|
||||
Bundle params = new Bundle();
|
||||
params.putString(FirebaseAnalytics.Param.ITEM_ID, action);
|
||||
params.putString(FirebaseAnalytics.Param.ITEM_CATEGORY, category);
|
||||
params.putString(FirebaseAnalytics.Param.ITEM_NAME, label);
|
||||
_FirebaseAnalytics.logEvent(FirebaseAnalytics.Event.VIEW_ITEM, params);
|
||||
_FirebaseAnalytics.logEvent(action, params);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -321,9 +321,8 @@ JSContext *js;
|
|||
}
|
||||
|
||||
-(NSString*) analyticsEvent:(NSString*) category :(NSString*) action :(NSString*) label {
|
||||
[FIRAnalytics logEventWithName:kFIREventViewItem
|
||||
[FIRAnalytics logEventWithName:action
|
||||
parameters:@{
|
||||
kFIRParameterItemID:action,
|
||||
kFIRParameterItemName:label,
|
||||
kFIRParameterItemCategory:category
|
||||
}];
|
||||
|
|
|
@ -381,6 +381,7 @@ export default class ScratchJr {
|
|||
ScratchJr.stopStripsFromTop(e);
|
||||
ScratchJr.unfocus(e);
|
||||
ScratchJr.saveProject(e, ScratchJr.flippage);
|
||||
iOS.analyticsEvent('editor', 'project_editor_close');
|
||||
}
|
||||
|
||||
static flippage () {
|
||||
|
@ -536,6 +537,7 @@ export default class ScratchJr {
|
|||
inFullscreen = false;
|
||||
UI.quitFullScreen();
|
||||
onBackButtonCallback.pop();
|
||||
iOS.analyticsEvent('editor', 'full_screen_exited');
|
||||
document.body.style.background = 'white';
|
||||
}
|
||||
|
||||
|
|
|
@ -716,6 +716,7 @@ export default class Sprite {
|
|||
var sprites = JSON.parse(page.sprites);
|
||||
sprites.push(this.id);
|
||||
page.sprites = JSON.stringify(sprites);
|
||||
iOS.analyticsEvent('editor', 'text_sprite_create');
|
||||
if ((this.str == '') && !whenDone) {
|
||||
this.setTextBox();
|
||||
this.activateInput();
|
||||
|
@ -805,6 +806,7 @@ export default class Sprite {
|
|||
document.body.scrollLeft = 0;
|
||||
var form = document.forms.activetextbox;
|
||||
var changed = (this.oldvalue != form.typing.value);
|
||||
iOS.analyticsEvent('editor', 'text_sprite_close');
|
||||
if (this.noChars(form.typing.value)) {
|
||||
this.deleteText(this.oldvalue != '');
|
||||
} else {
|
||||
|
@ -889,6 +891,7 @@ export default class Sprite {
|
|||
var ti = document.forms.activetextbox.typing;
|
||||
gn('textbox').style.visibility = 'visible';
|
||||
var me = this;
|
||||
iOS.analyticsEvent('editor', 'text_sprite_open');
|
||||
ti.onblur = function () {
|
||||
me.unfocusText();
|
||||
};
|
||||
|
|
|
@ -60,6 +60,7 @@ export default class Record {
|
|||
|
||||
// Dialog box hide/show
|
||||
static appear () {
|
||||
iOS.analyticsEvent('editor', 'record_dialog_open');
|
||||
gn('backdrop').setAttribute('class', 'modal-backdrop fade in');
|
||||
setProps(gn('backdrop').style, {
|
||||
display: 'block'
|
||||
|
@ -71,6 +72,7 @@ export default class Record {
|
|||
}
|
||||
|
||||
static disappear () {
|
||||
iOS.analyticsEvent('editor', 'record_dialog_close');
|
||||
setTimeout(function () {
|
||||
gn('backdrop').setAttribute('class', 'modal-backdrop fade');
|
||||
setProps(gn('backdrop').style, {
|
||||
|
@ -152,6 +154,7 @@ export default class Record {
|
|||
}
|
||||
|
||||
static startRecording (filename) {
|
||||
iOS.analyticsEvent('editor', 'start_recording');
|
||||
if (parseInt(filename) < 0) {
|
||||
// Error in getting record filename - go back to editor
|
||||
recordedSound = undefined;
|
||||
|
@ -250,6 +253,7 @@ export default class Record {
|
|||
|
||||
// Stop the volume monitor and recording
|
||||
static stopRecording (fcn) {
|
||||
iOS.analyticsEvent('editor', 'stop_recording');
|
||||
if (timeLimit != null) {
|
||||
clearTimeout(timeLimit);
|
||||
timeLimit = null;
|
||||
|
|
|
@ -8,6 +8,7 @@ import Page from '../engine/Page';
|
|||
import ScriptsPane from './ScriptsPane';
|
||||
import Undo from './Undo';
|
||||
import UI from './UI';
|
||||
import iOS from '../../iPad/iOS';
|
||||
import Events from '../../utils/Events';
|
||||
import ScratchAudio from '../../utils/ScratchAudio';
|
||||
import {frame, gn, localx, newHTML, scaleMultiplier, getIdFor,
|
||||
|
@ -82,6 +83,7 @@ export default class Thumbs {
|
|||
var tb = Thumbs.getType(Thumbs.t, 'pagethumb');
|
||||
if (ScratchJr.shaking && (e.target.className == 'deletethumb')) {
|
||||
ScratchJr.clearSelection();
|
||||
iOS.analyticsEvent('editor', 'delete_scene');
|
||||
ScratchJr.stage.deletePage(tb.owner);
|
||||
return;
|
||||
}
|
||||
|
@ -376,6 +378,7 @@ export default class Thumbs {
|
|||
sc.owner.deactivate();
|
||||
}
|
||||
ScratchJr.unfocus(e);
|
||||
iOS.analyticsEvent('editor', 'add_scene');
|
||||
new Page(getIdFor('page'));
|
||||
}
|
||||
|
||||
|
|
|
@ -729,7 +729,7 @@ export default class UI {
|
|||
UI.creatTopBarClicky(div, 'go', 'go on', UI.toggleRun);
|
||||
UI.creatTopBarClicky(div, 'resetall', 'resetall', UI.resetAllSprites);
|
||||
UI.creatTopBarClicky(div, 'full', 'fullscreen', ScratchJr.fullScreen);
|
||||
UI.toggleGrid(true);
|
||||
UI.setShowGrid(false);
|
||||
}
|
||||
|
||||
static resetAllSprites (e) {
|
||||
|
@ -756,11 +756,12 @@ export default class UI {
|
|||
|
||||
static switchGrid () {
|
||||
ScratchAudio.sndFX('tap.wav');
|
||||
UI.toggleGrid(!Grid.hidden);
|
||||
UI.setShowGrid(Grid.hidden);
|
||||
iOS.analyticsEvent('editor', Grid.hidden ? 'hide_grid' : 'show_grid');
|
||||
}
|
||||
|
||||
static toggleGrid (b) {
|
||||
Grid.hide(b);
|
||||
static setShowGrid (b) {
|
||||
Grid.hide(!b);
|
||||
gn('grid').className = Grid.hidden ? 'gridToggle off' : 'gridToggle on';
|
||||
}
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import Record from '../editor/ui/Record';
|
|||
|
||||
export function editorMain () {
|
||||
iOS.getsettings(doNext);
|
||||
iOS.analyticsEvent('editor', 'project_editor_open');
|
||||
function doNext (str) {
|
||||
var list = str.split(',');
|
||||
iOS.path = list[1] == '0' ? list[0] + '/' : undefined;
|
||||
|
|
|
@ -164,8 +164,12 @@ export default class Paint {
|
|||
let action = '';
|
||||
let label = '';
|
||||
// Analytics:
|
||||
// md3: name of the asset, an md5 hash for user generated, filename for library items
|
||||
// sname: is not set for a new character (ignored for backgrounds)
|
||||
// * md3: name of the asset, an md5 hash for user generated, filename for library items
|
||||
// * sname: is not set for a new character (ignored for backgrounds)
|
||||
// log two events:
|
||||
// * paint editor is opened
|
||||
// * type of edit (edit_background, edit_character, new_character)
|
||||
iOS.analyticsEvent('paint_editor', 'paint_editor_open');
|
||||
if (bkg) {
|
||||
action = 'edit_background';
|
||||
label = (md5 in MediaLib.keys) ? md5 : 'user_background';
|
||||
|
@ -352,6 +356,7 @@ export default class Paint {
|
|||
}
|
||||
|
||||
static close () {
|
||||
iOS.analyticsEvent('paint_editor', 'paint_editor_close');
|
||||
saving = true;
|
||||
paintFrame.className = 'paintframe disappear';
|
||||
frame.style.display = 'block';
|
||||
|
|
Loading…
Add table
Reference in a new issue