SDK 集成

SDK 集成

工程设置导入framework

申请应用的AppId

请找运营人员获取应用ID和广告位ID。

导入package

  • pubspec.yaml接入方式,优缺点: 桥接已写好,开发者只需导入package即可。 适用: 适用于大多数flutter开发者,集成、使用简单,省时省力。
zjsdk_flutter: ^0.2.2

Xcode编译选项设置

添加HTTP权限

  • 在项目路径下 -> ios -> 打开Runner.xcworkspace, 在Runner项目 -> TARGETS -> Info -> Custom iOS Target Properties 添加 App Transport Security Settings,先点击左侧展开箭头,再点右侧加号,Allow Arbitrary Loads 选项自动加入,修改值为 YES。 SDK API 已经全部支持HTTPS,但是广告主素材存在非HTTPS情况。
<key>NSAppTransportSecurity</key>
  <dict>
     <key>NSAllowsArbitraryLoads</key>
   <true/>
</dict>

切记

千万不要在NSAllowsArbitraryLoads这个属性 之后 再去设置 Allow Arbitrary Loads in Web Content 这个属性,否则影响某些正常功能的使用

  • Build SettingsOther Linker Flags 增加参数 -ObjC,字母o和c 大写

添加位置权限

  • SDK 需要位置权限以更精准的匹配广告,需要在应用的 info.plist 添加相应配置信息,避免 App Store 审核被拒:
Privacy - Location When In Use Usage Description
Privacy - Location Always and When In Use Usage Description
Privacy - Location Always Usage Description
Privacy - Location Usage Description

scheme列表添加以下内容

  • 用于判断用户设备使用环境,提高安全性,增加收益
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>alipayauth</string>
    <string>alipays</string>
    <string>alipay</string>
    <string>wechat</string>
    <string>weixin</string>
    <string>taobao</string>
    <string>tbopen</string>
    <string>openapp.jdmobile</string>
    <string>pinduoduo</string>
    <string>meituanwaimai</string>
    <string>imeituan</string>
    <string>snssdk1128</string>
    <string>kwai</string>
    <string>cydia</string>
    <string>sinaweibo</string>
    <string>dianping</string>
    <string>xhsdiscover</string>
    <string>bilibili</string>
    <string>baiduboxapp</string>
    <string>tmall</string>
    <string>fleamarket</string>
    <string>eleme</string>
    <string>OneTravel</string>
    <string>onetravel</string>
    <string>quark</string>
    <string>youku</string>
    <string>uppaywallet</string>
    <string>luckycoffee</string>
    <string>orpheus</string>
    <string>ziroom</string>
    <string>openanjuke</string>
    <string>fdd</string>
    <string>soufun</string>
    <string>lianjia</string>
    <string>lianjiabeike</string>
    <string>cainiao</string>
    <string>bytedance</string>
    <string>soul</string>
    <string>weixinULAPI</string>
    <string>mqq</string>
    <string>mqqapi</string>
    <string>mqqopensdkapiV2</string>
    <string>mqqopensdkapiV4</string>
    <string>jdmobile</string>
    <string>openjdlite</string>
    <string>openapp.jdpingou</string>
    <string>taobaolite</string>
    <string>taobaolive</string>
    <string>taobaotravel</string>
    <string>ctrip</string>
    <string>palfish-read</string>
    <string>douyutv</string>
    <string>sinaweibohd</string>
    <string>weibosdk</string>
    <string>baidumobads</string>
    <string>itms-beta</string>
    <string>pddopen</string>
    <string>snssdk35</string>
    <string>snssdk1112</string>
    <string>snssdk2329</string>
    <string>snssdk141</string>
    <string>vipshop</string>
    <string>dewuapp</string>
    <string>suning</string>
    <string>suningebuy</string>
    <string>com.suning.SuningEBuy</string>
    <string>iting</string>
    <string>baiduhaokan</string>
    <string>usage_crazyreader</string>
    <string>pajkdoctor</string>
    <string>qunariphone</string>
    <string>qunaraphone</string>
    <string>QunarAlipay</string>
    <string>mttbrowser</string>
    <string>dragon1967</string>
    <string>ttnewssso</string>
    <string>wbmain</string>
    <string>awemesso</string>
    <string>douyinopensdk</string>
    <string>mp1089867489</string>
    <string>sohuvideo-iphone</string>
    <string>momochat</string>
    <string>bdboxiosqrcode</string>
    <string>freereader</string>
    <string>ucbrowser</string>
    <string>gifshow</string>
    <string>weishiiosscheme</string>
    <string>qqnews</string>
    <string>qmkege</string>
    <string>yymobile</string>
    <string>yykiwi</string>
    <string>sinanews</string>
    <string>paesuperbank</string>
    <string>qiyi-iphone</string>
    <string>iqiyi</string>
    <string>baidumap</string>
    <string>openanjuke</string>
    <string>bds</string>
    <string>shuabao</string>
    <string>orpheuswidget</string>
    <string>qqmusic</string>
    <string>zhihu</string>
    <string>cmblife</string>
    <string>iosamap</string>
    <string>sinafinance</string>
    <string>zhwnl</string>
    <string>kugouURL</string>
    <string>ksnebula</string>
    <string>BaiduIMShop</string>
    <string>com.sogou.sogouinput</string>
    <string>tenvideo</string>
    <string>qmtoken</string>
    <string>dzhiphone</string>
    <string>doubanradio</string>
    <string>amihexin</string>
    <string>rm434209233MojiWeather</string>
    <string>com.kuwo.kwmusic.kwmusicForKwsing</string>
    <string>camcard</string> <string>camscanner</string>
    <string>com.kingsoft.powerword.6</string>
    <string>comIfeng3GifengNews</string>
    <string>buka</string>
    <string>yddictproapp</string>
    <string>gtgj</string>
    <string>elongiPhone</string>
    <string>baiduvideoiphone</string>
    <string>wireless1688</string>
    <string>bitauto.yicheapp</string>
    <string>app.soyoung</string>
    <string>weiyun</string>
    <string>xunlei</string>
    <string>mdopen</string>
    <string>mdsopen</string>
    <string>flyreader</string>
    <string>novelfm3040luckydog</string>
    <string>baiduboxlite</string>
    <string>quantgroup</string>
    <string>tantanapp</string>
    <string>usagecrazyreaderios</string>
    <string>dingdongneighborhood</string>
    <string>duapp</string>
    <string>hlluapp</string>
    <string>msec</string>
    <string>bosszp</string>
    <string>tuhu</string>
    <string>bdminivideo</string>
    <string>shuqireader</string>
    <string>txvideo</string>
    <string>baiduboxmission</string>
    <string>com.baidu.tieba</string>
    <string>qihooloan</string>
    <string>travelguide</string>
    <string>kaola</string>
    <string>tomas</string>
    <string>secoo</string>
    <string>taoumaimai</string>
    <string>amapuri</string>
    <string>vmall</string>
    <string>miguvideo</string>
    <string>comjia</string>
    <string>bitauto.yicheapp</string>
    <string>yanxuan</string>
    <string>yohobuy</string>
    <string>agoda</string>
    <string>openapp.xzdz</string>
    <string>beibeiapp</string>
    <string>openjd</string>
    <string>jhs</string>
    <string>yhd</string>
    <string>GomeEShop</string>
    <string>douyin</string>
    <string>mogujie</string>
    <string>koubei</string>
    <string>gengmei</string>
    <string>airbnb</string>
    <string>didicommon</string>
    <string>OneTravel</string>
    <string>farfetchCN</string>
    <string>farfetch</string>
    <string>kfcapplinkurl</string>
    <string>uclink</string>
</array>

iOS 14 注意事项

  1. iOS 14.5及以上版本ATT权限申请 App Tracking Transparency(ATT) 框架向用户提出应用程序跟踪授权请求,并提供跟踪授权状态。自iOS14.5 开始,在应用程序调用 ATT 向用户提跟踪授权请求之前,IDFA 将不可用。如果应用未提出此请求,应用获取到的 IDFA 将为0,建议您在应用启动时调用,以便我们能够提供更精准的进行广告投放和收入优化。

要获取 ATT 权限,请更新您的 Info.plist,添加 NSUserTrackingUsageDescription 字段和自定义文案描述。代码示例:

<key>NSUserTrackingUsageDescription</key>
<string>该标识符将用于向您投放个性化广告</string>

请先确保项目中已经正确引入AdSupport.framework和AppTrackingTransparency.framework,可在TARGETS -> Link Binary With Libraries下查看。

向用户申请权限时,请调用 requestTrackingAuthorizationWithCompletionHandler:方法。我们建议您申请权限后再请求广告,以便广告能准确的获得用户授权状态。

  • objc申请广告权限
#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AdSupport/AdSupport.h>

- (void)applicationDidBecomeActive:(UIApplication *)application { 
    if (@available(iOS 14.0, *)) {
        // iOS14及以上版本需要先请求权限
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
                // 获取到权限后,依然使用老方法获取idfa
                if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
                    NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
                } else {
                    NSLog(@"请在设置-隐私-跟踪中允许App请求跟踪");
                }
            }];
        });
    } else {
        // iOS14以下版本依然使用老方法
        // 判断在设置-隐私里用户是否打开了广告跟踪
        if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
            NSString *idfa = [[ASIdentifierManager sharedManager].advertisingIdentifier UUIDString];
        } else {
            NSLog(@"请在设置-隐私-广告中打开广告跟踪功能");
        }
    } 
}
  • Swift申请广告权限
import AdSupport
import AppTrackingTransparency

override func applicationDidBecomeActive(_ application: UIApplication) {
    DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
        if #available(iOS 14.0, *) {
            AppTrackingManager.requestTrackingAuthorization { status in 
                switch status {
                    case .authorized:
                        print("用户授权跟踪")
                    case .denied:
                        print("用户拒绝授权")
                    case .restricted:
                        print("跟踪被限制")
                    case .notDetermined:
                        print("用户尚未决定")
                    @unknown default:
                        print("未知的跟踪状态")
                }
            }
        }
    }
}

注意

请求idfa权限的这个方法需要在applicationDidBecomeActive中调用,如果在 didFinishLaunchingWithOptions这个方法中调用,那么可能不会弹出授权弹窗,最终导致获取不到idfa。 上架AppStore时,有些系统无法弹出授权弹窗,请把申请权限代码延迟2秒左右加载即可。

SKAdNetwork 接入

  • 使用Apple的转化跟踪SKAdNetwork,这意味着即使IDFA不可用,也可以将应用安装归因。 1.在Xcode项目导航器中,选择Info.plist。 2.单击属性列表编辑器中任何键旁边的添加按钮(+),以创建一个新的属性键。 3.输入密钥名称SKAdNetworkItems。选择Array。 4.将SKAdNetworkId以字典的形式添加到数组中。
//将SKAdNetwork ID 添加到 info.plist 中,以保证 SKAdNetwork 的正确运行
//广点通
SKAdNetworkIdentifier : f7s53z58qe.skadnetwork
//快手
SKAdNetworkIdentifier : r3y5dwb26t.skadnetwork
//sigmob
SKAdNetworkIdentifier : 58922NB4GD.skadnetwork
//MTG
SKAdNetworkIdentifier : kbd757ywx3.skadnetwork
//穿山甲
SKAdNetworkIdentifier : 238da6jt44.skadnetwork
SKAdNetworkIdentifier : x2jnk7ly8j.skadnetwork
SKAdNetworkIdentifier : 22mmun2rn5.skadnetwork
//Google
SKAdNetworkIdentifier : cstr6suwn9.skadnetwork
<key>SKAdNetworkItems</key>
<array>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>238da6jt44.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>x2jnk7ly8j.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>f7s53z58qe.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>58922NB4GD.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>kbd757ywx3.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>22mmun2rn5.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>r3y5dwb26t.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>cstr6suwn9.skadnetwork</string>
    </dict>
</array>