在 Delphi 10.4.2 中使用 Google Analytics GA4

Working with Google Analytics GA4 in Delphi 10.4.2

我正在尝试将事件从我的移动应用程序发送到 Google 分析。 外部图书馆连接: com-google-android-gms.play-services-analytics-impl.16.0.8.jar Androidapi.JNI.PlayServices

启动应用程序后,我得到以下信息。

04-23 15:03:50.835 30878 30878 I GAv4    :   adb shell setprop log.tag.GAv4 DEBUG
04-23 15:03:50.835 30878 30878 I GAv4    :   adb logcat -s GAv4
04-23 15:03:50.869 30878 30878 D GAv4    : setLocalDispatchPeriod (sec): 5
04-23 15:03:51.506 30878 30986 D GAv4    : Sending first hit to property: 269XX9293
04-23 15:03:51.508 30878 30986 D GAv4    : Hit delivery requested: ht=1619179430868, _s=0, _v=ma12.4.51, a=2027768350, adid=7b03fae1-XXXX-4820-892a-ba3983eb6b7e, aid=com.XXXXXXX, an=XXXXXXX, ate=1, av=1.0.1, cid=24213dea-e355-XXXX-8b91-17087584684a, ea=lo
gin, ec=login, el=login, ev=87, sr=1080x2030, t=event, tid=269XX9293, ul=ru-ru, v=1
04-23 15:03:51.737 30878 30986 D GAv4    : Hit sent to the device AnalyticsService for delivery

添加到 AndroidManifest.xml

<receiver android:name="com.google.android.gms.analytics.AnalyticsReceiver"
            android:enabled="true">
            <intent-filter>
                <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH" />
            </intent-filter>
        </receiver>
        <service android:name="com.google.android.gms.analytics.AnalyticsService"
            android:enabled="true"
            android:exported="false"/>

        <!-- Optionally, register CampaignTrackingReceiver and CampaignTrackingService to enable
             installation campaign reporting -->
        <receiver android:name="com.google.android.gms.analytics.CampaignTrackingReceiver"
            android:exported="true">
            <intent-filter>
                <action android:name="com.android.vending.INSTALL_REFERRER" />
            </intent-filter>
        </receiver>
        <service android:name="com.google.android.gms.analytics.CampaignTrackingService" />     

要使用 Java class,使用以下 class com-google-android-gms.play-services-analytics-impl.16.0.8.jar

unit GoogleAnalytics;

interface

 uses
   System.SysUtils,

   System.Types, System.UITypes, System.Classes, System.Variants,
  {$IFDEF ANDROID}
      Androidapi.JNI.PlayServices,
      Androidapi.Helpers,
      Androidapi.JNI.JavaTypes,     
      Androidapi.JNI.GraphicsContentViewText,
  {$ENDIF}
   FMX.Types;

type
     TwGoogleAnalytics=class
       private
        FCollectDataPermission
                      : boolean;
        FGoogleAppId,
        fClient_Id
                      : String;
        {$IFDEF ANDROID}
          FTracker    : Janalytics_Tracker;
          FGoogleAId, JClient_Id  : JString;
        {$ENDIF}
       public
         {$IFDEF ANDROID}
            JGA : Janalytics_GoogleAnalytics;
            property CollectDataPermission: boolean read FCollectDataPermission write FCollectDataPermission;
         {$ENDIF}
          constructor Create;
          procedure SetParams(const aGoogleAppID, aClient_Id:string);
          
         property GoogleAppId:string read FGoogleAppId;
     end;

implementation


 constructor TwGoogleAnalytics.Create;
  begin
   FGoogleAppId := '';
   fClient_Id   := '';
  end;

  procedure TwGoogleAnalytics.SetParams(const aGoogleAppID, aClient_Id : String);
  var
    Map1      : JMap;
    Hit       : JHitBuilders_HitBuilder;
    EventHit  : JHitBuilders_EventBuilder;
    Loger     : Janalytics_Logger;
  begin
   {$IFDEF ANDROID}
    CollectDataPermission := true;//(Ini.CollectDataPermission = PERMISSION_YES);

    JGA   :=  TJanalytics_GoogleAnalytics.JavaClass.getInstance( TAndroidHelper.Context );
    JGA.setDryRun(false);
    JGA.reportActivityStart( SharedActivity );

    FGoogleAId  :=  StringToJString(aGoogleAppID);
    JClient_Id  :=  StringToJString(aClient_Id);
    FTracker    :=  JGA.newTracker(FGoogleAid);

    if FTracker <> nil then
    Begin
      FTracker.enableAutoActivityTracking(true);
      FTracker.enableAdvertisingIdCollection(true);

      EventHit:= TJHitBuilders_EventBuilder.Create;

      EventHit.setAction(StringToJString('login'));
      EventHit.setCategory(StringToJString('login'));
      EventHit.setLabel(StringToJString('login'));
      EventHit.setValue(87);

      Map1 := EventHit.build;


      FTracker.send(Map1);

      JGA.setLocalDispatchPeriod(5);
    End;
   {$ENDIF}
   FGoogleAppId:=aGoogleAppID;
  end;
...
end.

但是没有数据用于分析。图书馆有可能已经过时了。但是我不知道如何下载一个新的,在 SDK 的描述中有一个选项只能使用 gradle。据我所知,这在 Delphi 中是不可能的。我会等待任何建议。

在深入研究文档之后。 GoogleAnalytics 我找到了这个。

此代码用于通用分析而不是 GA4,因此如果您尝试使用它向 GA4 发送数据,它将无法正常工作。

package com.example;

 class MyApp extends Application {
   public static GoogleAnalytics analytics;
   public static Tracker tracker;

   @Overwrite
   public void onCreate() {
     analytics = GoogleAnalytics.getInstance(this);
     analytics.setLocalDispatchPeriod(1800);

     tracker = analytics.newTracker("UA-000-1"); // Replace with actual tracker id
     tracker.enableExceptionReporting(true);
     tracker.enableAdvertisingIdCollection(true);
     tracker.enableAutoActivityTracking(true);
   }
 }

我向团队发送了 ping 消息,以了解是否有此的 GA4 版本。

要将数据发送到 GA4,您需要使用 Firebase SDK,它将事件发送到 Google Analytics https://firebase.google.com/docs/analytics logcat 中的 GAv4 与 GA4 无关,而是 Universal AnalyticsAPI 的第 4 版