unit UMeng; //https://developer.umeng.com/docs/66632/detail/66889 //delphi ��֧��Android 64�����Բ�������64λ so��arm64-v8a interface uses System.Sysutils, System.Generics.Collections; type TUMeng = class private class var FLastViewName: string; class function DeviceType(IsPhone: Boolean): Integer; class procedure Debug; public //ע��: ��ʹ���Ѿ���AndroidManifest.xml�����ù�appkey��channelֵ�� //Ҳ��Ҫ��App�����е��ó�ʼ���ӿڣ�����Ҫʹ��AndroidManifest.xml�����úõ�appkey��channelֵ�� //UMConfigure.init������appkey��channel��������Ϊnull���� class procedure Init(appkey, channel: string; pushSecret: string = ''; IsPhone: Boolean = True); overload; //ע�⣺������Ѿ���AndroidManifest.xml�����ù�appkey��channelֵ�����Ե��ô˰汾��ʼ�������� class procedure Init(pushSecret: string = ''; IsPhone: Boolean = True); overload; class procedure onResume; class procedure onPause; class procedure onPageStart(ViewName: string); class procedure onPageEnd(ViewName: string); class procedure onPageAutoChange(ViewName: string = ''; NeedPauseAndResume: Boolean = False); //��ͨ�¼� class procedure onEvent(AID: string; ALabel: string = #0); overload; //������(K-V)�¼� class procedure onEvent(AID: string; AProperties: TArray<TPair<string, string>>); overload; //��ֵ�� class procedure onEventValue(AID: string; AProperties: TArray<TPair<string, string>>; ADuration: Integer = 0); //�ϴη��ʵ�ҳ���� class property LastViewName: string read FLastViewName; end; implementation uses {$IFDEF ANDROID} Androidapi.JNI.Os, Androidapi.JNI.Provider, Androidapi.JNIBridge, Androidapi.Helpers, Androidapi.JNI.JavaTypes, Androidapi.JNI.App, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.umeng.common, Androidapi.JNI.umeng.analytics, {$ENDIF} FMX.Types; { TUMeng } class procedure TUMeng.Debug; {$IF DEFINED(ANDROID) && DEFINED(DEBUG)} var I: Integer; sDeviceInfo: string; arrInfo: TJavaObjectArray<JString>; {$ENDIF} begin {$IF DEFINED(ANDROID) && DEFINED(DEBUG)} (** * �����������Log���� * ����: boolean Ĭ��Ϊfalse������鿴LOG����Ϊtrue *) TJUMConfigure.JavaClass.setLogEnabled(True); TJMobclickAgent.JavaClass.setDebugMode(True); sDeviceInfo := ''; arrInfo := TJUMConfigure.JavaClass.getTestDeviceInfo( {$IF CompilerVersion > 27} TAndroidHelper.Context {$ELSE} SharedActivityContext {$ENDIF} ); for I := 0 to arrInfo.Length - 1 do sDeviceInfo := Format('%s %s', [sDeviceInfo, JStringToString(arrInfo.Items[I])]); Log.d('TUMeng-DeviceInfo:' + sDeviceInfo); //setCatchUncaughtExceptions can not be called in child process //TJMobclickAgent.JavaClass.setCatchUncaughtExceptions(True); {$ENDIF} end; class procedure TUMeng.onEvent(AID: string; ALabel: string = #0); begin {$IFDEF ANDROID} TJMobclickAgent.JavaClass.onEvent( {$IF CompilerVersion > 27} TAndroidHelper.Context {$ELSE} SharedActivityContext {$ENDIF}, StringToJString(AID), StringToJString(ALabel) ); {$ENDIF} end; class function TUMeng.DeviceType(IsPhone: Boolean): Integer; begin {$IFDEF ANDROID} if IsPhone then Result := TJUMConfigure.JavaClass.DEVICE_TYPE_PHONE else Result := TJUMConfigure.JavaClass.DEVICE_TYPE_BOX; {$ENDIF} end; (** * ��ʼ��common�� * ����1:�����ģ�����Ϊ�� * ����2:�豸���ͣ�UMConfigure.DEVICE_TYPE_PHONEΪ�ֻ���UMConfigure.DEVICE_TYPE_BOXΪ���ӣ�Ĭ��Ϊ�ֻ� * ����3:Push����ҵ���secret *) class procedure TUMeng.Init(pushSecret: string; IsPhone: Boolean); begin {$IFDEF DEBUG} Debug; {$ENDIF} FLastViewName := ''; {$IFDEF ANDROID} TJUMConfigure.TU2Fixinit( {$IF CompilerVersion > 27} TAndroidHelper.Context {$ELSE} SharedActivityContext {$ENDIF}, DeviceType(IsPhone), StringToJString(pushSecret)); {$ENDIF} end; (** * ��ʼ��common�� * ����1:�����ģ�����Ϊ�� * ����2:������+�� AppKey * ����3:������+�� Channel * ����4:�豸���ͣ�UMConfigure.DEVICE_TYPE_PHONEΪ�ֻ���UMConfigure.DEVICE_TYPE_BOXΪ���ӣ�Ĭ��Ϊ�ֻ� * ����5:Push����ҵ���secret *) class procedure TUMeng.Init(appkey, channel, pushSecret: string; IsPhone: Boolean); begin {$IFDEF DEBUG} Debug; {$ENDIF} FLastViewName := ''; {$IFDEF ANDROID} TJUMConfigure.TU2Fixinit( {$IF CompilerVersion > 27} TAndroidHelper.Context {$ELSE} SharedActivityContext {$ENDIF}, StringToJString(appkey), StringToJString(channel), DeviceType(IsPhone), StringToJString(pushSecret)); // ҳ��ɼ�ģʽ TJMobclickAgent.JavaClass.setPageCollectionMode(TJMobclickAgent_PageMode.JavaClass.AUTO); {$ENDIF} end; class procedure TUMeng.onEvent(AID: string; AProperties: TArray<TPair<string, string>>); begin onEventValue(AID, AProperties); end; class procedure TUMeng.onEventValue(AID: string; AProperties: TArray<TPair<string, string>>; ADuration: Integer); {$IFDEF ANDROID} var FJMap: JHashMap; I: Integer; LProperty: TPair<string, string>; {$ENDIF} begin {$IFDEF ANDROID} FJMap := TJHashMap.JavaClass.init; for I := 0 to Length(AProperties) - 1 do FJMap.put(StringToJString(AProperties[I].Key), StringToJString(AProperties[I].Value)); if ADuration > 0 then TJMobclickAgent.JavaClass.onEventValue( {$IF CompilerVersion > 27} TAndroidHelper.Context {$ELSE} SharedActivityContext {$ENDIF}, StringToJString(AID), Jmap(FJMap), ADuration ) else TJMobclickAgent.JavaClass.onEvent( {$IF CompilerVersion > 27} TAndroidHelper.Context {$ELSE} SharedActivityContext {$ENDIF}, StringToJString(AID), Jmap(FJMap) ); {$ENDIF} end; class procedure TUMeng.onPageAutoChange(ViewName: string; NeedPauseAndResume: Boolean); begin {$IFDEF DEBUG} Log.d('---onPageAutoChange:' + FLastViewName + '/' + ViewName); {$ENDIF} if FLastViewName <> '' then begin onPageEnd(FLastViewName); if NeedPauseAndResume then onPause; end; if ViewName <> '' then begin onPageStart(ViewName); if NeedPauseAndResume then onResume; end; FLastViewName := ViewName; end; class procedure TUMeng.onPageEnd(ViewName: string); begin {$IFDEF DEBUG} Log.d('---onPageEnd:' + ViewName); {$ENDIF} {$IFDEF ANDROID} TJMobclickAgent.JavaClass.onPageEnd(StringToJString(ViewName)); {$ENDIF} end; class procedure TUMeng.onPageStart(ViewName: string); begin {$IFDEF DEBUG} Log.d('---onPageStart:' + ViewName); {$ENDIF} {$IFDEF ANDROID} TJMobclickAgent.JavaClass.onPageStart(StringToJString(ViewName)); {$ENDIF} end; class procedure TUMeng.onPause; begin {$IFDEF DEBUG} Log.d('---onPause'); {$ENDIF} {$IFDEF ANDROID} TJMobclickAgent.JavaClass.onPause( {$IF CompilerVersion > 27} TAndroidHelper.Context {$ELSE} SharedActivityContext {$ENDIF} ); {$ENDIF} end; class procedure TUMeng.onResume; begin {$IFDEF DEBUG} Log.d('---onResume'); {$ENDIF} {$IFDEF ANDROID} TJMobclickAgent.JavaClass.onResume( {$IF CompilerVersion > 27} TAndroidHelper.Context {$ELSE} SharedActivityContext {$ENDIF} ); {$ENDIF} end; end.