Utilice Analytics en una vista web

Las llamadas para registrar eventos o establecer propiedades de usuario activadas desde un WebView deben reenviarse al código nativo antes de poder enviarlas a Google Analytics.

Implementar el controlador de JavaScript

El primer paso para utilizar Google Analytics en un WebView es crear funciones de JavaScript para reenviar eventos y propiedades del usuario al código nativo. El siguiente ejemplo muestra cómo hacer esto de una manera que sea compatible con el código nativo de Android y Apple:
function logEvent(name, params) {
 
if (!name) {
   
return;
 
}

 
if (window.AnalyticsWebInterface) {
   
// Call Android interface
    window
.AnalyticsWebInterface.logEvent(name, JSON.stringify(params));
 
} else if (window.webkit
     
&& window.webkit.messageHandlers
     
&& window.webkit.messageHandlers.firebase) {
   
// Call iOS interface
   
var message = {
      command
: 'logEvent',
      name
: name,
      parameters
: params
   
};
    window
.webkit.messageHandlers.firebase.postMessage(message);
 
} else {
   
// No Android or iOS interface found
    console
.log("No native APIs found.");
 
}
}

function setUserProperty(name, value) {
 
if (!name || !value) {
   
return;
 
}

 
if (window.AnalyticsWebInterface) {
   
// Call Android interface
    window
.AnalyticsWebInterface.setUserProperty(name, value);
 
} else if (window.webkit
     
&& window.webkit.messageHandlers
     
&& window.webkit.messageHandlers.firebase) {
   
// Call iOS interface
   
var message = {
      command
: 'setUserProperty',
      name
: name,
      value
: value
   
};
    window
.webkit.messageHandlers.firebase.postMessage(message);
 
} else {
   
// No Android or iOS interface found
    console
.log("No native APIs found.");
 
}
}

Implementar interfaz nativa

Para invocar código nativo de Android desde JavaScript, implemente una clase con métodos marcados como @JavaScriptInterface :

public class AnalyticsWebInterface {

   
public static final String TAG = "AnalyticsWebInterface";
   
private FirebaseAnalytics mAnalytics;

   
public AnalyticsWebInterface(Context context) {
        mAnalytics
= FirebaseAnalytics.getInstance(context);
   
}

   
@JavascriptInterface
   
public void logEvent(String name, String jsonParams) {
        LOGD
("logEvent:" + name);
        mAnalytics
.logEvent(name, bundleFromJson(jsonParams));
   
}

   
@JavascriptInterface
   
public void setUserProperty(String name, String value) {
        LOGD
("setUserProperty:" + name);
        mAnalytics
.setUserProperty(name, value);
   
}

   
private void LOGD(String message) {
       
// Only log on debug builds, for privacy
       
if (BuildConfig.DEBUG) {
           
Log.d(TAG, message);
       
}
   
}

   
private Bundle bundleFromJson(String json) {
       
// ...
   
}

}

Una vez que haya creado la interfaz nativa, regístrela en su WebView para que sea visible para el código JavaScript que se ejecuta en WebView:

// Only add the JavaScriptInterface on API version JELLY_BEAN_MR1 and above, due to
// security concerns, see link below for more information:
// https://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
    mWebView
.addJavascriptInterface(
           
new AnalyticsWebInterface(this), AnalyticsWebInterface.TAG);
} else {
   
Log.w(TAG, "Not adding JavaScriptInterface, API Version: " + Build.VERSION.SDK_INT);
}

Próximos pasos

Para obtener una implementación completamente funcional de Google Analytics en un WebView, consulte el ejemplo de vista web de análisis .