Merge pull request from benjiwheeler/analytics

Add more analytics events, and use action as event type
This commit is contained in:
Benjamin Wheeler 2020-06-24 14:17:45 -04:00 committed by GitHub
commit dc8990f9ab
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 27 additions and 10 deletions
android/ScratchJr/app/src/main/java/org/scratchjr/android
ios/ScratchJr/src
src

View file

@ -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);
}
/**

View file

@ -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
}];

View file

@ -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';
}

View file

@ -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();
};

View file

@ -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;

View file

@ -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'));
}

View file

@ -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';
}

View file

@ -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;

View file

@ -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';