diff --git a/android/ScratchJr/app/src/main/java/org/scratchjr/android/JavaScriptDirectInterface.java b/android/ScratchJr/app/src/main/java/org/scratchjr/android/JavaScriptDirectInterface.java index 856eaefa..f61f1f66 100644 --- a/android/ScratchJr/app/src/main/java/org/scratchjr/android/JavaScriptDirectInterface.java +++ b/android/ScratchJr/app/src/main/java/org/scratchjr/android/JavaScriptDirectInterface.java @@ -629,4 +629,24 @@ public void setAnalyticsPlacePref(String place) { _activity.setAnalyticsPlacePref(place); } } + + /** + * Record a user property + * @param prefObjStr single key-value JSON string, like "{\"school\": \"Central High\"}" + */ + @JavascriptInterface + public void setAnalyticsPref(String prefObjStr) { + if (prefObjStr != null) { + try { + JSONObject jsonObject = new JSONObject(prefObjStr); + JSONArray jsonArray = jsonObject.names(); + String key = jsonArray.getString(0); + String value = jsonObject.getString(key); + _activity.setAnalyticsPref(key, value); + } catch (JSONException e) { + Log.e(LOG_TAG, "JSON error: " + e.getMessage(), e); + return; + } + } + } } diff --git a/android/ScratchJr/app/src/main/java/org/scratchjr/android/ScratchJrActivity.java b/android/ScratchJr/app/src/main/java/org/scratchjr/android/ScratchJrActivity.java index a58b89f2..e511efc9 100644 --- a/android/ScratchJr/app/src/main/java/org/scratchjr/android/ScratchJrActivity.java +++ b/android/ScratchJr/app/src/main/java/org/scratchjr/android/ScratchJrActivity.java @@ -520,6 +520,15 @@ public void setAnalyticsPlacePref(String place) { _FirebaseAnalytics.setUserProperty("place_preference", place); } + /** + * Record a user property + * @param key like "school" + * @param value like "Central High" + */ + public void setAnalyticsPref(String key, String value) { + _FirebaseAnalytics.setUserProperty(key, value); + } + public void translateAndScaleRectToContainerCoords(RectF rect, float devicePixelRatio) { float wx = _webView.getX(); float wy = _webView.getY(); diff --git a/ios/ScratchJr/src/ScratchJr.h b/ios/ScratchJr/src/ScratchJr.h index 873bf715..4201b3cb 100644 --- a/ios/ScratchJr/src/ScratchJr.h +++ b/ios/ScratchJr/src/ScratchJr.h @@ -128,6 +128,7 @@ - (NSString *) deviceName; - (NSString *) analyticsEvent:(NSString *)category :(NSString *)action :(NSString *)label; - (void) setAnalyticsPlacePref:(NSString *)place; +- (void) setAnalyticsPref:(NSString *)prefObjStr; @end @interface ViewController : UIViewController diff --git a/ios/ScratchJr/src/ViewController.m b/ios/ScratchJr/src/ViewController.m index 5571b85d..58d0d6d4 100644 --- a/ios/ScratchJr/src/ViewController.m +++ b/ios/ScratchJr/src/ViewController.m @@ -333,6 +333,16 @@ -(void) setAnalyticsPlacePref:(NSString*)place { [FIRAnalytics setUserPropertyString:place forName:@"place_preference"]; } +// @param prefObjStr like "{\"place_preference\": \"School\"}" +-(void) setAnalyticsPref:(NSString*)prefObjStr { + NSData* data = [prefObjStr dataUsingEncoding:NSUTF8StringEncoding]; + NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:data options:0 error: nil]; + NSString *key = [[dict allKeys] firstObject]; + NSString *value = [dict objectForKey: key]; + [FIRAnalytics setUserPropertyString:value forName:key]; +} + + // iPad name (used for information in the name/sharing dialog to help people using Airdrop) - (NSString*) deviceName { return [[UIDevice currentDevice] name]; diff --git a/src/tablet/Android.js b/src/tablet/Android.js index 90d0feeb..e4e5804b 100644 --- a/src/tablet/Android.js +++ b/src/tablet/Android.js @@ -261,6 +261,10 @@ export default class Android { AndroidInterface.setAnalyticsPlacePref(preferredPlace); } + static setAnalyticsPref (obj) { + AndroidInterface.setAnalyticsPref(JSON.stringify(obj)); + } + // // Web Wiew delegate call backs // // static pageError (desc) { diff --git a/src/tablet/OS.js b/src/tablet/OS.js index 794b7ef4..d3d86236 100644 --- a/src/tablet/OS.js +++ b/src/tablet/OS.js @@ -253,6 +253,10 @@ export default class OS { tabletInterface.setAnalyticsPlacePref(preferredPlace); } + static setAnalyticsPref (key, value) { + tabletInterface.setAnalyticsPref({[key]: value}); + } + // Web Wiew delegate call backs static pageError (desc) { diff --git a/src/tablet/iOS.js b/src/tablet/iOS.js index 747751ed..7b7e7b50 100644 --- a/src/tablet/iOS.js +++ b/src/tablet/iOS.js @@ -268,6 +268,10 @@ export default class iOS { window.tablet.setAnalyticsPlacePref(preferredPlace); } + static setAnalyticsPref (obj) { + window.tablet.setAnalyticsPref(JSON.stringify(obj)); + } + // // Web Wiew delegate call backs // // static pageError (desc) {