简介

支撑开发者在华为设备上进行广告流量变现,提供广告标识符能力方便开发者进行个性化广告投放,。

广告标识符(OAID)是一种非永久性设备标识符。使用OAID可在保护用户个人数据隐私安全的前提下,向用户提供个性化广告。

如果"限制个性化广告"开关状态为false,开发者可基于广告标识符进行广告跟踪和个性化广告推荐以提升广告精准性。

如果用户设置"限制个性化广告"开关为true,开发者应用和广告商不能使用OAID来向用户推送个性化广告,但仍可以推送非个性化的广告。

用户可在系统设置的"华为广告"界面中,重置"广告标识符"和启用"限制个性化广告",以保护用户个人数据的隐私安全。

用户重置"广告标识符"后,会生成一个新的OAID,开发者将只能获取到这个新的OAID。

OAID开放能力

开发者可基于OAID,向用户提供个性化的营销活动或商业广告,提升转化效果,过程如下:
1.开发者APP可调用华为广告服务(Huawei Ads)的接口,获得OAID和"限制个性化广告"开关状态。
2.开发者APP请求广告时,如果用户未启用"限制个性化广告",可根据OAID构建的细分人群,进行个性化的营销活动和商业广告推荐。
3.开发者APP向用户展示广告,当广告被用户点击后,开发者APP可从应用市场下载、安装被推广的APP。
4.开发者APP在曝光、点击、下载等事件中,携带OAID,用于平台对营销活动或商业广告的效果进行跟踪和分析。

您将会学到什么

硬件要求

华为Android终端设备(手机、平板)。

软件要求

华为Android终端设备中华为移动服务(HMS)版本在2.6.2及以上。
查看方法:设备上 设置-> 应用 –>应用管理 搜索华为移动服务

下载并解压HuaweiAdsOAID1_Demo.zip。

源码下载

使用Android Studio打开HuaweiAdsDemo工程,编译生成apk文件,下载到设备查看运行结果,APP运行后用户界面显示如下。您可以选择调用模式,然后点击 OAID示例,可在右图查看结果。

SDK方式

SDK方式是指通过HUAWEI Ads提供的SDK接入开放能力,接入方式简单推荐您使用这种方式接入。

  1. 集成SDK
    步骤1 配置HUAWEI Ads SDK的maven仓地址。
    打开AndroidStudio项目级build.gradle文件,在allprojects ->repositories里面配置SDK的maven仓地址。
  2. /HuaweiAdsDemo/build.gradle

    allprojects { repositories { google() jcenter() maven { url 'http://developer.huawei.com/repo/' } } }

    步骤2 配置依赖
    打开子工程app下的build.gradle文件,在dependencies新增SDK的依赖。

    /HuaweiAdsDemo/app/build.gradle

    dependencies { implementation 'com.huawei.hms:hms-ads-identifier:{version}' }

    说明:{version}替换为实际的SDK版本号,如:implementation 'com.huawei.hms:hms-ads-identifier:3.4.26.303'
    步骤 3 同步修改的文件

    步骤 4 配置混淆脚本(必选)
    /HuaweiAdsDemo/app/proguard-rules.pro

    -keep class com.huawei.hms.ads.** { *; } -keep interface com.huawei.hms.ads.** { *; }
  3. 调用getAdvertisingIdInfo静态方法获取OAID信息
    创建子线程,并调用静态的AdvertisingIdClient.getAdvertisingIdInfo(mContext)方法获取OAID信息,不要在主线程中调用该方法,代码示例如下:
    /HuaweiAdsDemo/app/src/main/java/com/huawei/pps/hms/test/oaid/OaidSdkUtil.java
    public static void getOaid(Context context, OaidCallback callback) { if (null == context || null == callback) { Log.e(TAG, "invalid input param"); return; } try { AdvertisingIdClient.Info info = AdvertisingIdClient.getAdvertisingIdInfo(context); if (null != info) { callback.onSuccuss(info.getId(), info.isLimitAdTrackingEnabled()); } else { callback.onFail("oaid is null"); } } catch (IOException e) { Log.e(TAG, "getAdvertisingIdInfo IOException"); callback.onFail("getAdvertisingIdInfo IOException"); } }

AIDL方式

AIDL方式无需集成任何的SDK,需熟悉Android的AIDL Service。

  1. 新增AIDL接口文件
    在工程中新增一个aidl接口文件,包名为com.uodis.opendevice.aidl 包含以下内容。
    /HuaweiAdsDemo/app/src/main/aidl/com/uodis/opendevice/aidl/OpenDeviceIdentifierService.aidl
    package com.uodis.opendevice.aidl; /* * Important: Do not modify the method sequence of the AIDL file.!!! */ interface OpenDeviceIdentifierService { String getOaid(); boolean isOaidTrackLimited(); }
  2. 创建一个类,实现ServiceConnection接口。
  3. 步骤1 实现ServiceConnection的onServiceConnected方法。

    步骤2 调用 OpenDeviceIdentifierService.Stub.asInterface方法获取OpenDeviceIdentifierService。

    步骤3 调用getOaid和isOaidTrackLimited方法获取OAID和"限制个性化广告"开关状态。

    /HuaweiAdsDemo/app/src/main/java/com/huawei/pps/hms/test/oaid/OaidAidlUtil.java

    private final class IdentifierServiceConnection implements ServiceConnection { private IdentifierServiceConnection() { } @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { Log.i(TAG, "onServiceConnected"); mService = OpenDeviceIdentifierService.Stub.asInterface(iBinder); if (null != mService) { try { if (null != mCallback) { mCallback.onSuccuss(mService.getOaid(), mService.isOaidTrackLimited()); } } catch (RemoteException e) { Log.e(TAG, "getChannelInfo RemoteException"); if (null != mCallback) { mCallback.onFail(e.getMessage()); } } catch (Exception e) { Log.e(TAG, "getChannelInfo Excepition"); if (null != mCallback) { mCallback.onFail(e.getMessage()); } } finally { unbindService(); } } } @Override public void onServiceDisconnected(ComponentName componentName) { Log.i(TAG, "onServiceDisconnected"); mService = null; } }
  4. 连接OAID的AIDL服务
    步骤1 创建一个IdentifierServiceConnection实例。
    步骤2 创建一个Intent,Action是"com.uodis.opendevice.OPENIDS_SERVICE"。
    步骤3 设置Intent的包名为"com.huawei.hwid"。
    步骤4 调用bindService连接OAID的AIDL服务。
  5. /HuaweiAdsDemo/app/src/main/java/com/huawei/pps/hms/test/oaid/OaidAidlUtil.java

    mServiceConnection = new IdentifierServiceConnection(); Intent intent = new Intent(SERVICE_ACTION); intent.setPackage(SERVICE_PACKAGE_NAME); boolean result = mContext.bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE); Log.i(TAG, "bindService result: " + result);
  6. 断开OAID的AIDL服务
    使用完AIDL接口后,应该主动断开服务连接。
  7. /HuaweiAdsDemo/app/src/main/java/com/huawei/pps/hms/test/oaid/OaidAidlUtil.java

    if (null != mServiceConnection) { mContext.unbindService(mServiceConnection); }

编译、加载、调试

完成上述业务代码的补全后,就可以进行编译。
编译有错误时,根据错误提示,进行代码修改。
完成编译后,生成apk安装并运行。

干得好,你已经成功完成了Codelab并学到了:

您可以阅读下面链接,了解更多相关的信息。

相关文档.

已复制代码