Use o Analytics em um WebView

As chamadas para registrar eventos ou definir propriedades do usuário disparadas de um WebView devem ser encaminhadas para o código nativo antes de serem enviadas ao Google Analytics.

Implementar manipulador JavaScript

A primeira etapa para usar o Google Analytics em um WebView é criar funções JavaScript para encaminhar eventos e propriedades do usuário para o código nativo. O exemplo a seguir mostra como fazer isso de maneira compatível com o código nativo do Android e da 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 interface nativa

Para invocar o código Android nativo a partir de JavaScript, implemente uma classe com 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) {
       
// ...
   
}

}

Depois de criar a interface nativa, registre-a em seu WebView para que fique visível para o código JavaScript em execução no 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 passos

Para uma implementação totalmente funcional do Google Analytics em um WebView, consulte o exemplo analytics-webview .