# 聚量APP SDK接入文档

# 一.SDK简介

聚量APP SDK,支持Android及IOS

# 二.Android SDK接入说明

# 1.添加依赖(version = 1.0.0-beta01)

maven(url = "http://10.20.4.20:8081/repository/maven-app/") {
    isAllowInsecureProtocol = true
}

implementation("com.yeahka.android:ykAds-core:$version")

# 2.获取广告

在同意隐私协议的时候添加初始化代码(与当前友盟sdk初始化类似,第一次启动APP需要同意隐私协议后调用,后续启动可以直接调用)

YkAdManager.initAd {
    adLoadTimeOut = 5_000//统一设置广告的超时时间,单位毫秒ms,默认5000,最低1000
}

创建一个显示广告的ViewGroup(建议使用FrameLayout),然后调用loadSplash(timeOut: Long, ykAdListener: YkAdListener) 请求广告,广告加载完成后会自动add刀当前viewGroup里面

//timeOut是超时时间(不传默认5_000毫秒,最低1_000毫秒,建议冷启动可以不用改,热启动也展示广告的话调低点),超时会回调onAdFailedToLoad
viewGroup.loadSplash(timeOut = 5_000, ykAdListener = object : YkAdListener {
    /**
    * 广告加载成功
    */
    override fun onAdLoaded() {
        YkAdLog.d(TAG, "onAdLoaded")
    }

    /**
    * 广告被展示了
    */
    override fun onAdShown() {
        YkAdLog.d(TAG, "onAdShown")
    }

    /**
    * 加载出错
    */
    override fun onAdFailedToLoad(code: Int) {
        YkAdLog.d(TAG, "onAdFailedToLoad:$code")
        go2Main()
    }

    /**
    * 点击了跳过
    */
    override fun onAdClosed() {
        YkAdLog.d(TAG, "onAdClosed")
        go2Main()
    }

    /**
    * 点击了广告
    */
    override fun onAdClicked() {
        YkAdLog.d(TAG, "onAdClicked")
        hasClick = true//避免主页面覆盖广告页,晚点再跳转到主页面
    }

})
        
override fun onResume() {
    super.onResume()
    if (hasClick){
        go2Main()
    }
}

# 三.iOS SDK接入说明

# 1.开发环境

# 确保您的开发和部署环境符合以下标准:

1.开发工具:推荐Xcode12及以上版本 2.部署目标:IOS10.0及以上版本

# 2.接入配置

# 1.为工程添加 YKMultipleAdSDK SDK Framework

导入SDK,将YKMultipleAdSDKDemo的lib文件夹下所有文件导入到相应的工程中(手动拖动时,选择 Copy items if needed ),文件包括:YKMultipleAdSDK.framework、BeiZiFoundation.framework、BeiZiSDK.framework

# 2.添加必要依赖库以及工程配置

在工程 Target Setting -> Build Phases -> Link Binary With Libraries 中进行添加

  • AdSupport.framework
  • WebKit.framework

# 3. 支持分类引用

在工程 Target Setting -> Build Settings -> Other Linker Flags 项添加 "-ObjC"

# 4.设置允许 http 连接

在工程的 Info.plist 文件中,设置 App Transport Security Settings 选项下 Allow Arbitrary Loads 值为 YES,对应 plist 内容为

<key>NSAppTransportSecurity</key> 
<dict> 
  <key>NSAllowsArbitraryLoads</key> 
  <true/> 
</dict>

# 5.iOS14 适配指南

iOS 14.5后,对于用户隐私保护,苹果新政策原因,需要对14及其以上系统适配,详情查看列表iOS14 适配指南

一.简介

iOS14后的系统,根据苹果政策要求,需要请求用户授权,访问与应用相关的数据以跟踪用户或设备。我们建议流量等待方法回调完成后处理广告相关逻 辑,这样如果用户授权使用IDFA信息,SDK可以使用IDFA进行广告请求,获取更好的广告投放效果,如果用户拒绝此请求,应用获取到的 IDFA 将自动清零,可能会导致您的广告收入的降低。 访问苹果政策说明 (opens new window)了解更多信息。

二.获取 App Tracking Transparency 授权(弹窗授权获取IDFA)

如果想在流量中显示 App Tracking Transparency 授权来获取IDFA,需要在Info.plist中添加NSUserTrackingUsageDescription,描述获取IDFA的用途。例如: NSUserTrackingUsageDescription 您的允许将用于个性化广告投放Copy to clipboardErrorCopied

该描述将用于授权IDFA的弹窗提示中,如下所示: 弹窗小字文案建议:

  • 获取标记权限向您提供更优质、安全的个性化服务及内容,未经同意我们不会用于其他目的;开启后,您也可以前往系统 “ 设置-隐私 ” 中随时关闭。
  • 获取IDFA标记权限向您提供更优质、安全的个性化服务及内容;开启后,您也可以前往系统 “ 设置-隐私 ” 中随时关闭。

三.SKAdNetwork

SKAdNetwork(SKAN)是 Apple 的归因解决方案,可帮助广告客户在保持用户隐私的同时衡量广告活动。 访问SKAdNetwork说明 (opens new window)了解更多信息。

若未集成优量汇、穿山甲等第三方广告源,可忽略该步骤

  • 应用编译环境升级至 Xcode 12.0 及以上版本
  • 将 SKAdNetwork ID 添加到 info.plist 中,以保证 SKAdNetwork 的正确运行
  <key>SKAdNetworkItems</key>
  <array>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>238da6jt44.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>22mmun2rn5.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>f7s53z58qe.skadnetwork</string>
    </dict>
  </array>

# 6.初始化SDK,在程序入口设置 AppID 信息

 #import <YKMultipleAdSDK/YKMultipleAdSDK.h>

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      
    [YKMAdSDKManager initWithAppKey:@"从 聚量 申请的 AppID"];
      //...
  } 

  ///开启测试环境,默认是关闭的
  + (void)openTestEnvironment:(BOOL)open;

  ////开启日志打印,默认是关闭的
  +(void)enableLog:(BOOL)enable;

# 3.IOS开屏广告接入代码

# 1.包含头文件

#import <YKMultipleAdSDK/YKMultipleAdSDK.h>

# 2.YKMultipleAdSDK 的创建和初始化

在AppDelegate头文件中导入头文件并声明实例以及声明代理,(开屏需要在AppDelegate中实现,如在其他页面创建可能会出现落地页无法弹出的问题,或者在启动时不会销毁掉的VC里)

#import <YKMultipleAdSDK/YKMultipleAdSDK.h>

@interface AppDelegate ()<YKMSplashAdDelegate>

@property (nonatomic, strong) YKMSplashAd *splashAd;

@end

创建和初始化广告,广告是异步的,所以不需要修改APP原有逻辑,初始化广告的方法放到

[self.window makeKeyAndVisible];

之后进行初始化

// 初始化广告位
self.splashAd = [[YKMSplashAd alloc] initWithAdid:@"在平台申请的广告位ID"];
// 设置代理
self.splashAd.delegate = self;
//加载广告
[self.splashAd loadSplashAd];

在代理开屏展现方法内实现下面代码

#pragma mark -YKMSplashAdDelegate
//广告加载成功
- (void)ykm_loadSplashSuccess:(YKMSplashAd *)splash {
    NSLog(@"开屏广告加载成功");
    [self.splashAd showSplashAdWithWindow:UIApplication.sharedApplication.keyWindow];
}

///广告加载失败
- (void)ykm_loadSplashFailed:(NSError *)error splash:(YKMSplashAd *)splash{
    NSLog(@"开屏广告加载失败:%@", error);
}

/// 广告展示成功
- (void)ykm_showSplashSuccess:(YKMSplashAd *)splash{
    NSLog(@"开屏广告展示成功");
}

///广告展示失败
- (void)ykm_showSplashFailed:(NSError *)error splash:(YKMSplashAd *)splash{
    NSLog(@"开屏广告展示失败");
}

///广告点击事件
- (void)ykm_clickSplash:(YKMSplashAd *)splash{
    NSLog(@"开屏广告被点击");
}

///广告关闭事件
- (void)ykm_closeSplash:(YKMSplashAd *)splash{
    NSLog(@"开屏广告关闭");
}

# 3.YKMSplashAdDelegate 的方法说明

///广告加载成功,可在该回调中展示开屏广告
- (void)ykm_loadSplashSuccess:(YKMSplashAd *)splash;

///广告加载失败
- (void)ykm_loadSplashFailed:(NSError *)error splash:(YKMSplashAd *)splash;

/// 广告展示成功
- (void)ykm_showSplashSuccess:(YKMSplashAd *)splash;

///广告展示失败
- (void)ykm_showSplashFailed:(NSError *)error splash:(YKMSplashAd *)splash;

///广告点击事件
- (void)ykm_clickSplash:(YKMSplashAd *)splash;

///广告关闭事件
- (void)ykm_closeSplash:(YKMSplashAd *)splash;

# 四.隐私协议相关说明

# 1. 聚量广告隐私协议说明

# 引言

聚量 SDK(以下简称“SDK产品”)由深圳市前海扫扫科技有限公司 (以下简称“我们”)开发, 公司注册地为深圳市前海深港合作区前湾一路1号A栋201室 (入驻深圳市前海商务秘书有限公司)。

《聚量 SDK个人信息保护规则》(以下简称“本规则”)主要向开发者及其终端用户(“终端用户”)说明,为了实现SDK产品的相关功能,SDK产品将如何处理终端用户的个人信息,“处理”包括收集、存储、使用、加工、传输、提供、公开个人信息等行为。本规则所称之聚量 SDK产品和/或服务包括:聚量 SDK JS版、聚量 SDK安卓版、聚量 SDK iOS版。

请开发者及终端用户务必认真阅读本规则。如您是开发者,请您确认充分了解并同意本规则后再集成SDK产品,如果您不同意本规则的任何内容,应立即停止接入及使用SDK产品;同时,您应仅在获得终端用户的同意后集成SDK产品并处理终端用户的个人信息。为了保障您的App合法合规,请App开发者务必将SDK产品升级到最新版本。

# 特别说明

如您是开发者,您应当:

1、遵守法律、法规收集、使用和处理终端用户的个人信息, 包括但不限于制定和公布有关个人信息保护的隐私政策等;

2、告知终端用户SDK产品收集、使用和处理终端用户个人信息的情况,并依法征得终端用户同意,在征得终端用户同意后初始化SDK产品;

3、在征得终端用户的同意前、以及在用户触发相应功能场景前,除非法律法规另有规定,不应收集任何终端用户的个人信息;

4、应按您的应用的具体功能场景,在用户触发具体功能场景时调用SDK的相应功能、调用相应权限或处理终端用户的个人信息,未到具体功能场景时不应调用相应的SDK功能、调用相应权限或处理终端用户的个人信息。

5、向终端用户提供易于操作且满足法律法规要求的用户权利实现机制, 并告知终端用户如何查阅、复制、修改、删除个人信息, 撤回同意, 以及限制个人信息处理、转移个人信息、获取个人信息副本和注销账号;

如开发者和终端用户对本规则内容有任何疑问、意见或建议的,可随时通过本规则第八条提供的方式与我们联系。

# 一、我们收集的信息及我们如何使用信息

(一) 为实现SDK产品功能所需收集的个人信息

为实现SDK产品的相应功能所必须,我们将向终端用户或开发者收集终端用户在使用与SDK产品相关的功能时产生的如下个人信息:

1.聚量 SDK JS版

个人信息类型 可选/必选 处理目的及功能场景 处理方式
ip 必选 客户端IP,用于排查崩溃问题,帮助网站、小程序提升稳定性与性能,识别Crash等问题 加密传输
ua 必选 客户端ua,用于排查崩溃问题,帮助网站、小程序提升稳定性与性能,识别Crash等问题 加密传输
微信APPID 微信小程序必选 用于排查崩溃问题,识别流量来源 加密传输
微信OpenID 微信小程序必选 用于标识设备和用户,协助排查识别Crash等问题 加密传输
阿里APPID 支付宝必选 用于排查崩溃问题,识别流量来源 加密传输
阿里OpenID 支付宝必选 用于标识设备和用户,协助排查识别Crash等问题 加密传输
手机型号 必选 排查崩溃问题,帮助APP提升稳定性,识别Crash等问题是否与手机型号有关 加密传输
网络类型 必选 在APP发生闪退时,识别Crash等问题是否与网络类型有关 加密传输
厂商系统版本 必选 排查崩溃问题,帮助APP提升稳定性,识别Crash等问题是否与厂商系统版本有关 加密传输
cpu架构类型 必选 排查崩溃问题,帮助APP提升稳定性,识别Crash等问题是否与CPU架构有关 加密传输
设备是否root 必选 在APP发生闪退时,识别Crash等问题是否是由于root导致 加密传输
磁盘空间占用大小 必选 在APP发生闪退时,识别Crash等问题是否是由于磁盘剩余空间小导致 加密传输
sdcard空间占用大小 必选 在APP发生闪退时,识别Crash等问题是否是由于sdcard剩余空间小导致 加密传输
内存空间占用大小 必选 在APP发生闪退时,识别Crash等问题是否是由于内存空间小导致 加密传输
应用当前正在运行的进程名和PID 必选 在APP发生闪退时,判断当前进程的ANR状态,排查崩溃问题,帮助APP提升稳定性 仅读取,不保存到本地,也不上传服务器

2.聚量 SDK 安卓版

个人信息类型 可选/必选 处理目的及功能场景 处理方式
手机型号 必选 排查崩溃问题,帮助APP提升稳定性,识别Crash等问题是否与手机型号有关 加密传输
网络类型 必选 在APP发生闪退时,识别Crash等问题是否与网络类型有关 加密传输
Android系统版本 必选 排查崩溃问题,帮助APP提升稳定性,识别Crash等问题是否与Android系统版本有关 加密传输
手机品牌 必选 排查崩溃问题,帮助APP提升稳定性,识别Crash等问题是否与手机品牌有关 加密传输
Android系统api等级 必选 排查崩溃问题,帮助APP提升稳定性,识别Crash等问题是否与Android系统api有关 加密传输
厂商系统版本 必选 排查崩溃问题,帮助APP提升稳定性,识别Crash等问题是否与厂商系统版本有关 加密传输
cpu架构类型 必选 排查崩溃问题,帮助APP提升稳定性,识别Crash等问题是否与CPU架构有关 加密传输
设备是否root 必选 在APP发生闪退时,识别Crash等问题是否是由于root导致 加密传输
磁盘空间占用大小 必选 在APP发生闪退时,识别Crash等问题是否是由于磁盘剩余空间小导致 加密传输
sdcard空间占用大小 必选 在APP发生闪退时,识别Crash等问题是否是由于sdcard剩余空间小导致 加密传输
内存空间占用大小 必选 在APP发生闪退时,识别Crash等问题是否是由于内存空间小导致 加密传输
应用当前正在运行的进程名和PID 必选 在APP发生闪退时,判断当前进程的ANR状态,排查崩溃问题,帮助APP提升稳定性 仅读取,不保存到本地,也不上传服务器

3.聚量 SDK iOS版

个人信息类型 可选/必选 处理目的及功能场景 处理方式
设备型号 必选 排查崩溃问题,帮助APP提升稳定性,识别Crash等问题是否与手机型号有关 加密传输
操作系统版本 必选 排查崩溃问题,帮助APP提升稳定性,识别Crash等问题是否与操作系统版本有关 加密传输
操作系统内部版本号 必选 排查崩溃问题,帮助APP提升稳定性,识别Crash等问题是否与操作系统内部版本号有关 加密传输
idfa 必选 排查崩溃问题,帮助APP提升稳定性,用于标识设备,提供APP联网设备数以及Crash率等指标 加密传输
wifi状态 必选 排查崩溃问题,帮助APP提升稳定性,识别Crash等问题是否与网络状态有关 加密传输
cpu属性 必选 排查崩溃问题,帮助APP提升稳定性,识别Crash等问题是否与CPU建构有关 加密传输
内存剩余空间 必选 在APP发生闪退时,识别Crash等问题是否是由于内存剩余空间小导致 加密传输
磁盘空间/磁盘剩余空间 必选 在APP发生闪退时,识别Crash等问题是否是由于内存剩余空间小导致 加密传输
运行时手机状态(进程所占内存、虚拟内存等) 必选 在APP发生闪退时,识别Crash等问题是否是由于当前APP使用内存异常导致 加密传输
是否越狱 必选 在APP发生闪退时,识别Crash等问题是否是由于设备越狱导致 加密传输
地区编码 必选 在APP发生闪退时,识别Crash等问题是否与设备地区有关 加密传输

需要说明的是,若是APP在后台运行时发生异常,SDK可能会在后台收集终端用户的上述个人信息,用于排查处理崩溃问题。

此外,如果App使用我们的数据上报和统计分析服务,App开发者可能通过我们收集并委托我们统计分析终端用户的相关信息,具体以App隐私政策及/或其他法律文件的披露为准。App开发者在使用SDK上报终端用户的个人信息前须按照法律法规的规定取得用户同意或符合法律法规规定的其他条件,否则,我们有权根据相关法律法规及本声明之规定随时停止对App开发者的服务。

请您留意,除上述表格说明的SDK提供服务所必须收集的信息外,SDK产品不会主动收集App终端用户的其他个人信息。

(二) 为实现SDK产品功能所需的权限

操作系统 权限名称 使用目的 是否可选
安卓 android.permission.INTERNET 查看网络状态,用于数据上报,实现开发者查看崩溃信息的目的 必选
安卓 android.permission.ACCESS_NETWORK_STAT 查看网络状态,用于数据上报,实现开发者查看崩溃信息的目的 必选
iOS 网络权限 查看网络状态,用于数据上报,实现开发者查看崩溃信息的目的 必选
iOS IDFA权限 用于标识设备,用于数据上报,实现开发者查看崩溃信息的目的 必选

请注意, 在不同设备和系统中, 权限显示方式及关闭方式会有所不同, 需同时参考其使用的设备及操作系统开发方的说明或指引。当终端用户关闭权限即代表其取消了相应的授权, 我们和开发者将不会继续收集和使用相关权限所对应的个人信息, 也无法为终端用户提供需要终端用户开启权限才能提供的对应的功能。

(三) 根据法律法规的规定,以下是征得用户同意的例外情形:

  1. 为订立、履行与终端用户的合同所必需;

  2. 为履行我们的法定义务所必需;

  3. 为应对突发公共卫生事件, 或者紧急情况下为保护终端用户的生命健康和财产安全所必需;

  4. 为公共利益实施新闻报道、舆论监督等行为, 在合理的范围内处理终端用户的个人信息;

  5. 依照本法规定在合理的范围内处理终端用户自行公开或者其他已经合法公开的个人信息;

  6. 法律行政法规规定的其他情形。

特别提示: 如我们收集的信息无法单独或结合其他信息识别到终端用户的个人身份, 其不属于法律意义上的个人信息。

# 二、第三方数据处理及信息的公开披露

我们不会与我们的关联公司、合作伙伴及第三方共享(“接收方”)终端用户的个人信息。

我们不会将终端用户的个人信息转移给任何公司、组织和个人, 但以下情况除外:

1.事先告知终端用户转移个人信息的种类、目的、方式和范围,并获得终端用户的单独同意;

2.如涉及合并、分立、解散、被宣告破产等原因需要转移个人信息的, 我们会向终端用户告知接收方的名称或者姓名和联系方式, 并要求接收方继续履行个人信息处理者的义务。接收方变更原先的处理目的、处理方式的, 我们会要求接收方重新取得终端用户的同意。

我们不会公开披露终端用户的个人信息, 但以下情况除外:

1.告知终端用户公开披露的个人信息的种类、目的、方式和范围并获得终端用户的单独同意后;

2.在法律法规、法律程序、诉讼或政府主管部门强制要求的情况下。

# 三、终端用户如何管理自己的信息

我们非常重视终端用户对其个人信息管理的权利, 并尽全力帮助终端用户管理个人信息,包括个人信息查阅、复制、修改、删除、撤回同意、限制个人信息处理、获取个人信息副本、注销账号以及设置隐私功能等, 以保障终端用户的权利。如您是开发者,您应当为终端用户提供并明确其查阅、复制、修改、删除个人信息、撤回同意、转移个人信息、限制个人信息处理、获取个人信息副本和注销账号的方式。

基于终端用户的同意而进行的个人信息处理活动, 终端用户有权撤回该同意。我们已向开发者提供关闭本SDK产品的能力,请开发者点击此处查看操作指引。由于我们与终端用户无直接的交互对话界面, 终端用户可以直接联系开发者停止使用本SDK产品,也可通过本规则的联系方式联系我们。如您是终端用户,请您理解,特定的业务功能和服务将需要您的信息才能得以完成,当您撤回同意或授权后,我们无法继续为您提供对应的功能和服务,也不再处理您相应的个人信息。但您撤回同意或授权的决定,不会影响我们此前基于您的授权而开展的个人信息处理。

# 四、信息的存储

(一) 存储信息的地点

我们遵守法律法规的规定,将在中华人民共和国境内收集和产生的个人信息存储在境内。

(二) 存储信息的期限

一般而言,我们仅在为实现目的所必需的最短时间内保留终端用户的个人信息,但下列情况除外:

·为遵守适用的法律法规等有关规定;

·为遵守法院判决、裁定或其他法律程序的规定;

·为遵守相关政府机关执法的要求。

# 五、信息安全

我们为终端用户的个人信息提供相应的安全保障,以防止信息的丢失、不当使用、未经授权访问或披露。

我们严格遵守法律法规保护终端用户的个人信息。

我们将在合理的安全水平内使用各种安全保护措施以保障信息的安全。

例如,我们使用加密技术、匿名化处理等手段来保护终端用户的个人信息。

我们建立专门的管理制度、流程和组织确保信息安全。

例如,我们严格限制访问信息的人员范围,要求他们遵守保密义务,并进行审查。

若发生个人信息泄露等安全事件,我们会启动应急预案,阻止安全事件扩大,并以推送通知、公告等形式告知开发者。

# 六、未成年人保护

本SDK产品主要面向成年人。 若您是开发者,如果终端用户是未满14周岁的未成年人(“儿童”),您应当向儿童的父母或其他监护人告知本规则,并在征得儿童儿童的父母或其他监护人同意的前提下处理儿童个人信息。如果我们发现开发者未征得儿童监护人同意向我们提供儿童个人信息的,我们将会采取措施尽快删除。 若您是儿童监护人,当您对您所监护儿童个人信息保护有相关疑问或权利请求时,您可以联系开发者, 或通过本规则第八条提供的方式与我们联系。

# 七、变更

我们可能适时修订本规则的内容。

如该等变更会导致终端用户在本规则项下权利的实质减损,我们将在变更生效前,通过网站公告等方式进行提示。如您是开发者,当更新后的本规则对处理终端用户的个人信息情况有重大变化的,您应当适时更新隐私政策,并以弹框形式通知终端用户并且获得其同意,如果终端用户不同意接受本规则, 请停止集成SDK产品。

# 八、联系我们

我们设立了专门的个人信息保护团队和个人信息保护负责人, 如果开发者和/或终端用户对本规则或个人信息保护相关事宜有任何疑问或投诉、建议时, 可以通过以下方式与我们联系: (i)通过 https://www.lejuliang.com/与我们联系;(ii)将问题发送至damon@yeahka.com;(iii)邮寄信件至: 中国广东省深圳市南山区科兴科学园C3栋6楼 聚量产品部(收)邮编: 518057。我们将尽快审核所涉问题, 并在15个工作日或法律法规规定的期限内予以反馈。

# 2. 倍孜SDK隐私协议说明

详情请访问第三方广告SDK隐私政策 (opens new window)了解更多信息。

# 五.Q&A