SDK 集成
SDK 集成
工程设置导入framework
申请应用的AppId
请找运营人员获取应用ID和广告位ID。
导入package
- pubspec.yaml接入方式,优缺点: 桥接已写好,开发者只需导入package即可。 适用: 适用于大多数flutter开发者,集成、使用简单,省时省力。
zjsdk_flutter: ^0.2.0
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 Settings
中Other 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>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>tmall</string>
<string>ctrip</string>
<string>palfish-read</string>
<string>douyutv</string>
<string>fleamarket</string>
<string>youku</string>
<string>sinaweibohd</string>
<string>weibosdk</string>
<string>sinaweibo</string>
<string>baidumobads</string>
<string>itms-beta</string>
<string>pddopen</string>
<string>snssdk35</string>
<string>snssdk1112</string>
<string>snssdk2329</string>
<string>vipshop</string>
<string>dewuapp</string>
<string>suning</string>
<string>suningebuy</string>
<string>iting</string>
<string>baiduhaokan</string>
<string>lianjia</string>
</array>
iOS 14 注意事项
- 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>