目录

Python SDK

华为分析服务目前已提供导入自定义用户属性和上报用户行为的API接口,为减小API接口的工作量,现提供Python版本的SDK给开发者集成,用以快速的使用API接口能力。

开发环境

Python 3.6.5及以上

操作步骤

  1. 下载Python SDK安装包到本地,下载链接请参见Python SDK下载。
  2. 本地解压以后执行如下命令安装SDK。
    python -m pip install hw_wisecloud_analytics-*.whl --upgrade
  3. 初始化SDK。
    1. 登录AppGallery Connect 网站 ,选择“我的项目”。
    2. 在项目列表中找到您的项目,在项目列表中点击需要集成SDK的应用。
    3. 在“项目设置”页面中,获取App相关信息。

    4. 添加App信息,如果您的服务端接收多个App的请求,可以初始化多个App信息。
      • 当应用类型为iOS时,进入“华为分析 > 管理 > 应用管理”菜单,获取“应用ID”和“应用包名”。 “set_app_id”配置为“应用ID”,“set_package_name”配置为“应用包名”。
      • 当应用类型为WEB时,“set_package_name”配置为“APP ID”。
      ha = HuaweiApp.Init('Android',\
          'https://test.test.cn').\
          set_app_id('123').\
          set_client_id('123').\
          set_client_secret('123').\
          set_package_name('123.123').\
          set_product_id('123').\
          build()

      其中:

      • "Android":需要添加的App的应用类型,如Android、iOS、HarmonyOS、WEB、Quick App。
      • "https://test.test.cn":App的数据处理位置的存储地址。

        数据处理位置

        存储地址

        中国

        1. 选择需要配置分析数据的应用。
        2. 点击“华为分析 > 管理 > 分析设置 > API管理”,在“API管理”处获取存储地址。

        新加坡

        俄罗斯

        德国

      • set_app_id:配置为“项目设置”页面中“应用”下的“APP ID”。
      • set_client_id:配置为“项目设置”页面中“应用”下的“Client ID”。
      • set_client_secret:配置为“项目设置”页面中“应用”下的“Client Secret”。
      • set_package_name:配置为“项目设置”页面中“应用”下的“包名”。
      • set_product_id:配置为“项目设置”页面中“项目”下的“项目ID”。
    5. (可选)设置您的上报策略配置,如果初始化SDK时,未指定上报策略配置,SDK将采用默认配置。

      当填入的参数类型非法时,SDK内部会强行转化输入的参数为指定的类型,如果无法转换,将强制设为默认值,并输出日志。

      SdkConfig.init().set_max_cache_size(10000).set_cache_time(10).set_max_retry(2).set_event_send_size(100).set_user_send_size(100).set_threshold(50).set_import_concurrent(10).set_async_mode(True).set_shut_down_delay(0.25).build();

      参数

      参数说明

      set_max_cache_size

      最大缓存数量,设置缓存中最大的数据量;当数量达到限制,会对最老的数据进行淘汰并记录日志。

      设置区间为1-1000000,默认存放10000条数据,类型为整数。

      set_cache_time

      缓存上报的间隔时间,单位为s。

      设置区间为1-1800s,默认为10s上报一次数据,类型为整数。

      set_max_retry

      上报重试次数,当上报失败时,会进行重试处理;当达到配置的最大上报次数还是失败时,则会记录日志处理。

      设置区间为 0-5次,默认重试2次,类型为整数。

      set_event_send_size

      单次“上报用户行为”的发送数量。

      设置区间为1-100,默认100,表示单次上报的用户行为数据为100条,类型为整数。

      set_user_send_size

      单次“导入自定义用户属性”的发送数量。

      设置区间为1-100,默认100,表示单次上报的自定义用户属性为100条,类型为整数。

      set_threshold

      缓存累积的数据达到缓存总量阈值时,则触发上报流程,单位为百分比。

      设置区间为1-100,默认50,类型为整数。

      set_import_concurrent

      设置并发上传任务数。

      设置区间为1-100,默认10,类型为整数。

      set_async_mode

      设置异步或同步上传模式,异步上传方式是依赖aiohttp异步请求库,请确保您安装了aiohttp异步请求库;当设置为同步模式时,SDK将利用多线程实现并发。

      True表示异步上传方式,False表示同步上传方式, 默认True,类型为布尔。

      set_shut_down_delay

      延迟关闭事件循环等待时间,只有当“set_async_mode”设置为“True”时,此配置生效,单位为秒。

      设置区间为0-1,默认0.25,类型为浮点。

      说明:

      Python 3.8及以上版本的asyncio标准库与aiohttp异步请求库配合时,偶发警告日志,不影响实际数据上报,如您想关闭告警日志,可参考Graceful Shutdown配置此参数以消减该日志。

    6. 初始化SDK。
      # 初始化HuaweiApp实例
      ha = HuaweiApp.Init('android',\
          'https://analytics-api.cloud.huawei.com.cn').\
          set_app_id('123').\
          set_client_id('123').\
          set_client_secret('123').\
          set_package_name('123.123').\
          set_product_id('123').\
      build()
       
      # 初始化SdkConfig配置实例
      config = SdkConfig.Init().\
       set_cache_time(10).\
       set_max_cache_size(1000).\
       set_user_send_size(100).\
       set_threshold(20).\
       build()
       
      # 为了方便统计与调试,每次上报的会话信息都会通过此回调告知调用者,此回调可选。
      def report_call_back(batch_result_list):
          print(f'[batch over report] got: {batch_result_list}')
      
      token_url = 'https://oauth-login.cloud.huawei.com/oauth2/v3/token'
      
      HuaweiAnalyticsClient.init([ha], policy=config,
      callback=report_call_back,
      token_url=token_url)    

      参数

      参数说明

      HuaweiApp

      此处参数为d中获取的App信息。

      SdkConfig

      此处参数为e中填写的上报配置。

      token_url

      Python SDK的鉴权请求地址,当前配置为https://oauth-login.cloud.huawei.com/oauth2/v3/token,详情请参见基于OAuth 2.0开放鉴权。

  4. 发送数据,数据接口参数请参考导入自定义用户属性和上报用户行为。
    # 上报用户属性
    ret = HuaweiAnalyticsClient.add_user_data('123', {
        'id': 'abc1',
        'properties': [{
            'id': 'pos1',
            'value': '123'
        }, {
            'id': 'pos2',
            'value': '456'
        }]
    })
     
    # 上报用户行为
    ret = HuaweiAnalyticsClient.add_event_data('101837255', {
        'aaid': '123-123-123-123-123',
        'eventid': '$EnterScreen',
        'eventtime': str(int(time.time() * 1000)),
        'event_session_name': '111111_22222',
        'first_session_event': 'true',
        'userid': 'myid',
        'properties': {
            'custom_key1': '',
            'custom_key2': '',
        }
    })

    如果您初始化时指定了“report_call_back”回调,当事件上传后都会通过此回调告知您本次上传结果。

    回调数据为dict类型,上报用户属性的回调数据示例如下:

    {
       //上报至appid为123的用户属性
       ha_handler: 'app_123_user',
       //上报模式:异步
       req_mode: 'async',
       //上报线程被唤醒的原因
       trigger_by: AwakeBatchReason.POLLING_INTERVAL,
       //错误或者成功会话分别以数组形式记录
       Failure_sessions: [{
       //上报回应
          response ': {
             status: 400,
             body: 'xxx'
          },
       //对应的请求(即调用add传入的data),方便开发者对照发现具体的问题
         request : {
             data_type: 1,
             userdata_set: [{
                'id': 'neg',
                'properties': [{
                'id': 'qwe',
                'value': '12345678'
                }]
             }]
          },
          //上报次数,范围[1~"set_max_retry"+1]
          req_count: 1,
          //数据上报的并发任务ID
          task_id: 1,
          //请求耗时
          elapsed_time: timedelta(microseconds=10000)}],
       success_sessions: [{
          response ': {
             status: 200,
             body: 'xxx'
          },
          request : {
             data_type: 1,
             userdata_set: [{
                'id': 'neg',
                'properties': [{
                'id': 'qwe',
                'value': '12345678'
                }]
             }]
          },
          req_count: 1,
          task_id: 0,
          elapsed_time: timedelta(microseconds=10000)
       }]
    }
  5. 刷新数据,将所有数据立即发送到服务器。

    当服务升级、重启等导致进程关闭的场景时,可以调用flush方法,上报所有数据。

    # 发送所有收集的信息到服务器 
     HuaweiAnalyticsClient.flush()

其他配置

Python SDK定义了日志打印的类HaSdkLogger,如您需要查看Python SDK打印的日志,则您需要先实现自定义的logging处理器,然后在初始化Python SDK时,调用HaSdkLogger.init()以设置自定义logging处理器。

# 指定输出到文件的日志处理器
file = logging.FileHandler('test.log')
# 指定输出到流的日志处理器,也可以基于StreamHandler派生处理器子类
stream = logging.StreamHandler()
 
# 把上述自定义的输出通道传给HaSdkLogger,如果都未定义,则SDK不会输出任何日志
HaSdkLogger.init(file_handler=file, stream_handler=stream, level=logging.INFO)