iOS 集成指南

plugin 接入说明

接入前创建好应用ID和广告位ID

plugin 导入

https://pub.dev/packages/adsjmsdk

dependencies:
  adsjmsdk: any

本地导入方式

1.解压后,把 adsjmsdk_safe 文件夹复制到工程目录下
2.pubspec.yaml 导入 plugin

dependencies:
  adsjmsdk:
    # 本地导入方式,设置好 plugin 所在路径
    path: ../

Xcode 编译选项设置

项目工程中添加权限

  1. ⼯程 plist ⽂件设置,点击右边的 information Property List 后边的 "+" 展开
  2. 添加 App Transport Security Settings,先点击左侧展开箭头,再点右侧加号,Allow Arbitrary Loads 选项⾃动加⼊
<key>NSAppTransportSecurity</key>
  <dict>
     <key>NSAllowsArbitraryLoads</key>
   <true/>
</dict>

关于 iOS 14 AppTrackingTransparency

从 iOS 14.5 开始,只有在获得用户明确许可的前提下,应用才可以访问用户的 IDFA 数据并向用户投放定向广告。在应用程序调用 App Tracking Transparency 框架向最终用户提出应用程序跟踪授权请求之前,IDFA 将不可用。如果某个应用未提出此请求,则读取到的 IDFA 将返回全为0的字符串。

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

<key>NSUserTrackingUsageDescription</key>
<string>需要获取您设备的广告标识符,以为您提供更好的广告体验</string>

2.向用户申请权限时,请调用 requestTrackingAuthorizationWithCompletionHandler:方法。

#import <AppTrackingTransparency/AppTrackingTransparency.h>
#import <AdSupport/AdSupport.h>
- (void)requestIDFA {
  [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
    // [self loadAd];
  }];
}

iOS 15.0 中,如果是在启动方法中调用授权,不会弹出授权提示框,可以参考:https://juejin.cn/post/7018126149553225741

SKAdNetwork 跟踪转化

支持了 Apple 官方的 SKAdNetwork 框架的渠道,会在获取不到 IDFA 的时候,正常获取转化。为了实现这个功能,需要在 info.plist 添加对应的 SKAdNetworkItems。
部分常用 SKAdNetworkIdentifier:

SKAdNetworkIdentifier
238da6jt44.skadnetwork
x2jnk7ly8j.skadnetwork
22mmun2rn5.skadnetwor
f7s53z58qe.skadnetwork
r3y5dwb26t.skadnetwork
58922nb4gd.skadnetwork
f7s53z58qe.skadnetwork
27a282f54n.skadnetwork
kbd757ywx3.skadnetwork
mls7yz5dvl.skadnetwork
4fzdc2evr5.skadnetwork
4pfyvq9l8r.skadnetwork
ydx93a7ass.skadnetwork
cg4yq2srnc.skadnetwork
p78axxw29g.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>22mmun2rn5.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>f7s53z58qe.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>r3y5dwb26t.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>58922nb4gd.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>f7s53z58qe.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>27a282f54n.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>kbd757ywx3.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>mls7yz5dvl.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>4fzdc2evr5.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>4pfyvq9l8r.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>ydx93a7ass.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>cg4yq2srnc.skadnetwork</string>
    </dict>
    <dict>
        <key>SKAdNetworkIdentifier</key>
        <string>p78axxw29g.skadnetwork</string>
    </dict>
  </array>

一、初始化 SDK

注意点
注册AppId触发需要较早的时机,所以最好放在原生的 AppDelegate 中调用

1.Objective-C

#import <LUYSDK/LUYSDK.h>

- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  //注册AppId
  [LUYSDKConfig registerAppId:@"sjm_ios123"];
  
  [GeneratedPluginRegistrant registerWithRegistry:self];
  return [super application:application didFinishLaunchingWithOptions:launchOptions];
}

2.Swift

import LUYSDK

override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    //注册AppId
    LUYSDKConfig.registerAppId("sjm_ios123")

    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }

3.Flutter

SjmAdSdk.init("sjm_ios123");

二、广告接入

广告接入具体示范可以参照 Demo

1、开屏广告接入

第一种方式(推荐使用)

//第一个参数:广告id
//第二个参数:超时时间
SjmAdSdk.showSplashAd(
    "SJM_S002",5,
    onSjmAdLoaded: (String id) {
        print("SplashAd 加载成功");
    },
    onSjmAdShow: (String id) {
        print("SplashAd 展示");
    },
    onSjmAdClicked: (String id) {
        print("SplashAd 点击");
    },
    onSjmAdClosed: (String id) {
        print("SplashAd 关闭");
    },
    onSjmAdError: (String id, int code, String message) {
        print("SplashAd 错误 "+message);
    },
);

第二种方式

//第一个参数:广告id
SplashAdView(
    adId: "SJM_S002",
    width: width,
    height: height,
    onSjmAdLoaded: (String id) {
        print("SplashAd 加载成功");
    },
    onSjmAdShow: (String id) {
        print("SplashAd 开屏展示");
    },
    onSjmAdClicked: (String id) {
        print("SplashAd 开屏点击");
    },
    onSjmAdClosed: (String id) {
        print("SplashAd 开屏关闭");
    },
    onSjmAdError: (String id, int code, String message) {
        print("SplashAd 加载失败");
    }
)

2、激励视频接入

//第一个参数:广告id
//第二个参数:用户ID
SjmAdSdk.showRewardVideoAd(
    "广告位id","用户id",
    onSjmAdTradeId:(String id){
        print("RewardVideoAd onSjmAdTradeId");
    },
    onSjmAdLoaded: (String id) {
        print("RewardVideoAd onSjmAdLoad");
    },
    onSjmAdShow: (String id) {
        print("RewardVideoAd onSjmAdShow");
    },
    onSjmAdReward: (String id) {
        print("RewardVideoAd onReward");
    },
    onSjmAdClicked: (String id) {
        print("RewardVideoAd onSjmAdClick");
    },
    onSjmAdVideoComplete: (String id) {
        print("RewardVideoAd onVideoComplete");
    },
    onSjmAdClosed: (String id) {
        print("RewardVideoAd onSjmAdClose");
    },
    onSjmAdError: (String id, int code, String message) {
        print("RewardVideoAd onSjmAdError");
    },
);

3、插屏广告接入

//第一个参数:广告id
SjmAdSdk.loadInterstitalAd(
    "广告位id",
    onSjmAdLoaded: (String id) {
        print("InterstitalAd onSjmAdLoad");
    },
    onSjmAdShow: (String id) {
        print("InterstitalAd onSjmAdShow");
    },
    onSjmAdClicked: (String id) {
        print("InterstitalAd onSjmAdClick");
    },
    onSjmAdClosed: (String id) {
        print("InterstitalAd onSjmAdClose");
    },
    onSjmAdError: (String id, int code, String message) {
        print("InterstitalAd onSjmAdError");
    },
);

4、模板信息流接入

//adId:广告ID
//width: 期望宽度
//height: 期望高度
NativeExpressAdView(
    adId:  "广告位id",
    width: 350,
    height: 300,
    onSjmAdLoaded: (String id) {
        print("native_express onSjmAdLoad");
    },
    onSjmAdShow: (String id) {
        print("native_express onSjmAdShow");
    },
    onSjmAdClicked: (String id) {
        print("native_express onSjmAdClick");
    },
    onSjmAdClosed: (String id) {
        print("native_express onSjmAdClose");
    },
    onSjmAdError: (String id, int code, String message) {
        print("native_express onError");
    },
)

5、Banner 接入

//adId:广告ID
//width: 期望宽度
//height: 期望高度
BannerAdView(
    adId: "广告位id",
    width: 400,
    height: 60,
    onSjmAdLoaded: (String id) {
        print("BannerAd onSjmAdLoad");
    },
    onSjmAdShow: (String id) {
        print("BannerAd onSjmAdShow");
    },
    onSjmAdClicked: (String id) {
        print("BannerAd onSjmAdClick");
    },
    onSjmAdClosed: (String id) {
        print("BannerAd onSjmAdClose");
    },
    onSjmAdError: (String id, int code, String message) {
        print("BannerAd onError");
    },
)

6、全屏视频接入

//第一个参数:广告id
SjmAdSdk.showFullVideoAd(
    "SJMKS_FV001",
    onSjmAdLoaded: (String id) {
        print("RewardVideoAd onSjmAdLoad");
    },
    onSjmAdShow: (String id) {
        print("RewardVideoAd onSjmAdShow");
    },
    onSjmAdClicked: (String id) {
        print("RewardVideoAd onSjmAdClick");
    },
    onSjmAdVideoComplete: (String id) {
        print("RewardVideoAd onVideoComplete");
    },
    onSjmAdClosed: (String id) {
        print("RewardVideoAd onSjmAdClose");
    },
    onSjmAdError: (String id, int code, String message) {
        print("RewardVideoAd onSjmAdError");
    },
);

常见回调查询

名称 备注
onSjmAdLoaded 广告加载成功
SjmAd_VideoCached 广告视频下载或读取缓存
onSjmAdShow 广告展示
onSjmAdClicked 广告点击回调
onSjmAdClosed 广告关闭回调
onSjmAdError 广告错误和错误信息
onSjmAdReward 触发广告奖励(激励视频)

plugin 接入说明

Xcode 编译选项设置

一、初始化 SDK

二、广告接入