yimeng 集成到 App、初始化、调用 5 种广告位的完整流程。| 项 | 版本 |
|---|---|
| iOS Deployment Target | 14.0+ |
| Xcode | 14+(在 Xcode 26 验证) |
| 语言 | Objective-C / Swift(OC 桥接) |
Podfile 中添加:pod install.xcworkspace,在代码中引入:#import <yimeng/yimeng.h>yimeng_ios_release是二进制发布仓库,只包含对外接入所需的yimeng.xcframework、yimeng.podspec和对外说明,不包含 SDK 源码。
当前 Gitea HTTPS 证书与域名不匹配,CocoaPods 使用https://git.zhaomuqingyun.com/...会拉取失败;证书修复前请使用上面的 HTTP 地址,或在具备 SSH key 的环境中使用 SSH 地址。
yimeng.xcframework 手动接入。yimeng.xcframework 拖进自己的 App target,General → Frameworks, Libraries, and Embedded Content 里选 Do Not Embed(静态 framework)。<key>NSUserTrackingUsageDescription</key>
<string>用于个性化广告投放</string>
<!-- 如果对接的接口是 http 或落地页含 http -->
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>AppDelegate 或 SceneDelegate 早期阶段调用一次。仅两个必填参数,其他自动从 Info.plist 取。#import <yimeng/yimeng.h>
QLSdkConfig *config = QLSdkConfig.builder
.setMediaId(@"YOUR_MEDIA_ID")
.setMediaSecret(@"YOUR_MEDIA_SECRET")
.setDebug(YES) // 调试期打开,会输出请求/响应详细日志
.build;
[QLSdk initSdkWithConfig:config
success:^{
NSLog(@"SDK 初始化成功");
} failure:^(NSInteger code, NSString *message) {
NSLog(@"SDK 初始化失败 code=%ld msg=%@", (long)code, message);
}];appName / appVersion / appVersionCode / bundleIdentifier 都由 SDK 从 Info.plist 的 CFBundleDisplayName / CFBundleShortVersionString / CFBundleVersion / CFBundleIdentifier 自动读取,不需要传。QLCustomController 覆写对应方法,在 init 之前通过 [QLSdk setCustomController:] 设进去:@interface MyPrivacy : QLCustomController @end
@implementation MyPrivacy
- (BOOL)isAllowSDKObtainIDFA { return NO; } // 关闭 IDFA 采集
- (BOOL)isAllowSDKObtainLocation { return NO; }
- (NSDictionary<NSString *, NSNumber *> *)mediaLocation {
return @{
@"latitude": @(39.916527), // 纬度
@"longitude": @(116.397128), // 经度
};
}
- (NSInteger)personalizedState { return 1; } // 1 关闭个性化推荐
@end
[QLSdk setCustomController:[MyPrivacy new]];mediaLocation 仅在 isAllowSDKObtainLocation 返回 NO 时读取,用于宿主自行提供经纬度。字典 key 约定如下:| key | 含义 | 类型 |
|---|---|---|
latitude | 纬度 | NSNumber,double |
longitude | 经度 | NSNumber,double |
nil 即可。QLAdSlot.builder 链式配置广告位参数[QLSdk get] 拿到 id<QLAdNative>,调用对应 loadXxxAd:delegate:Load delegate 的 success 回调里拿到广告对象interactionDelegate / delegate,调用 showXxx 展示QLAdSlot 不要求每种广告位把所有字段都传一遍。除 slotId 外,其余字段都有默认值,应按广告位类型选择性配置 。| 参数 | 开屏 | Banner | 插屏 | 激励视频 | 原生模板 | 说明 |
|---|---|---|---|---|---|---|
slotId | 必填 | 必填 | 必填 | 必填 | 必填 | 媒体配置的广告位 ID |
expressViewAcceptedSize / adSize | 推荐 | 推荐 | 通常不传 | 通常不传 | 推荐 | Banner / 原生模板尺寸;开屏可传容器尺寸。setAdSize 是原生模板更直观的别名 |
countdownTime | 可选 | 不传 | 不传 | 不传 | 不传 | 开屏倒计时,限制为 3-15 秒 |
countdownVisibility | 可选 | 不传 | 不传 | 不传 | 不传 | 是否显示开屏倒计时 |
rewardName | 不传 | 不传 | 不传 | 建议 | 不传 | 激励奖励名称 |
rewardAmount | 不传 | 不传 | 不传 | 建议 | 不传 | 激励奖励数量 |
userId | 不传 | 不传 | 不传 | 按业务需要 | 不传 | 激励奖励关联用户标识 |
mediaExtra | 不传 | 不传 | 不传 | 按业务需要 | 不传 | 激励奖励透传信息 |
playMuted | 不传 | 不传 | 不传 | 可选 | 不传 | 激励视频初始是否静音,默认开启 |
adCount | 不传 | 不传 | 不传 | 不传 | 可选 | 原生模板请求数量,默认 1 |
imageAcceptedSize | 通常不传 | 通常不传 | 通常不传 | 通常不传 | 通常不传 | 未指定模板尺寸时的素材尺寸兜底 |
basePrice | 按竞价需要 | 按竞价需要 | 按竞价需要 | 按竞价需要 | 按竞价需要 | 仅明确使用底价竞价时配置 |
codeId | 不传 | 不传 | 不传 | 不传 | 不传 | 当前以 slotId 为主,不需同时传 |
orientation | 默认竖屏 | 默认竖屏 | 默认竖屏 | 默认竖屏 |