版本 | 修订日期 | 修订说明 |
---|---|---|
v2.4.11 | 2024-10-24 | 1.第三方广告网络SDK更新 2.优化双11预算 |
接入集成可使用以下测试id:
第一组测试id(建议使用) | 第二组测试id(填充或不足) | ||
---|---|---|---|
应用id | test0001 | 应用id | 743p10001095 |
开屏广告 | sjmad_test002 | 开屏广告 | 743d10003212 |
激励视频 | sjmad_test001 | 激励视频 | 743d10003212 |
插屏(半屏) | sjmad_test004 | 插屏(半屏) | 743d10003213 |
信息流 | sjmad_test005 | 信息流 | 743d10003215 |
banner(横幅) | sjmad_test003 | banner(横幅) | 743d10003216 |
全屏视频 | sjmad_test006 | 全屏视频 | 743p10001095 |
开发者自渲染 | sjmad_test007 | 开发者自渲染 | 743d10003217 |
全屏竖版视频流 | sjmad_test008 | 全屏竖版视频流 | |
短视频内容 | sjmad_test012 | 短视频内容 | 743d10003218 |
其他 | 沟通索取 |
如对接上有任何技术或运营规则问题可以联系相关人员,微信:liangaxybz,QQ:22770670
SDK及DEMO下载
将本SDK压缩包内的sjm_sdk_x.x.x.aar
、sjm_kssdk_x.x.x.aar
复制到Application Module/libs
文件夹(没有的话须手动创建), 并将以下代码添加到您Application Module的build.gradle
中
repositories {
flatDir {
dirs 'libs'
}
}
depedencies {
implementation(name: 'sjm_sdk_x.x.x', ext: 'aar')
implementation(name: 'sjm_kssdk_x.x.x', ext: 'aar')
// SDK v2.1.1版本开始,SDK依赖appcompat-v7库,请确保⼯工程中有appcompat-v7
implementation 'com.android.support:appcompat-v7:27.1.1'
// 2.1.1之后的版本,SDK有依赖recyclerview-v7
implementation 'com.android.support:recyclerview-v7:27.1.1'
// 需要支持AndroidX库
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
}
com.android.support:support-v4
需要使用 24.2.0 以及以上版本。若您的 targetSDKVersion>=23 ,您还需要在运行时进行动态权限申请(可参考示例工程)
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 安装APK权限-->
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.GET_TASKS" /> <!-- 如果有视频相关的广告且使用textureView播放,请务必添加,否则黑屏 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
本SDK可运行于 Android5.0 (API Level 21) 及以上版本,请确保build.gradle
中的minSdkVersion
参数不小于21
x86
、x86_64
、armeabi
、armeabi-v7a
、arm64-v8a
。如果您应用中支持的架构超出这五种,请在build.gradle
中使用 abiFilters 选择支持的架构。如下所示android {
defaultConfig{
ndk {
// 设置支持的 SO 库构架,注意这里要根据你的实际情况来设置 abiFilters
'armeabi-v7a' 'arm64-v8a' 'x86' 'x86_64''armeabi'
}
}
}
开发者需要在Application#onCreate
方法中调用以下代码来初始化sdk。 目前sdk已支持多进程,如果明确某个进程不会使用到广告sdk,可以只针对特定进程初始化广告sdk。
public class MainApplication extends Application {
@Override
public void onCreate(){
super.onCreate();
SjmSdk.init(this, "应用ID");
}
}
SDK为接入方提供了开屏广告,开屏广告建议为用户在进入App时展示的全屏广告。开屏广告为一个 View ,需要传入一个承载容器 ViewGroup ,宽高默认为 match_parent ,注意开屏广告容器 ViewGroup :width >=70% 屏幕宽,height >=50% 屏幕高,否则会影响计费。
public class SjmSplashAd {
/**
* @param activity
* @param adListener
* @param posId 广告位id
* @param fetchTimeOut 广告时长
*/
public SjmSplashAd(Activity activity, SjmSplashAdListener adListener, String posId, int fetchTimeOut)
/**
* 设置开屏广告事件
*/
public void setAdListener(SjmSplashAdListener adListener);
public void fetchAndShowIn(ViewGroup adContainer);
}
public interface SjmSplashAdListener {
/**
* 加载成功
*/
void onSjmAdLoaded();
/**
* 拉取广告超时
*/
void onSjmAdLoadTimeOut();
/**
* 开屏广告展示
*/
void onSjmAdShow();
/**
* 点击
*/
void onSjmAdClicked();
/**
* 倒计时结束
*/
void onSjmAdTickOver();
/**
* 开屏广告关闭
*/
void onSjmAdDismissed();
/**
* 广告错误
*/
void onSjmAdError(SjmAdError error);
}
SjmSplashAd splashAd = new SjmSplashAd(this, this, "广告位id", 超时时长(int型,单位秒));
splashAd.fetchAndShowIn(container);
SplashActivity#onCreate()
生命周期内直接创建SjmSplashAd
对象,创建SjmSplashAd
对象需要延时本SDK为接入方提供激励视频广告,该广告的效果为观看完毕视频广告,发放奖励给用户。使用场景包括但不限于:
public class SjmRewardVideoAd{
public SjmRewardVideoAd(Activity activity, String posId, SjmRewardVideoAdListener adListener);
/**
* 设置用户id
*/
public void setUserId(String userId);
/**
* 加载广告
*/
public void loadAd();
/**
* 展示广告
*/
public void showAD();
}
public interface SjmRewardVideoAdListener{
/**
* 每次广告加载成功,会在此回调生生成一个唯一的tradeid
*/
void onSjmAdTradeId(String tradeid, String tradeKey, String isVerify);
/**
* 视频素材缓存成功,可在此回调后进行广告展示
*/
void onSjmAdLoaded(String adid);
/**
* 视频素材缓存成功,可在此回调后进行广告展示
*/
void onSjmAdVideoCached();
/**
* 激励视频广告页面展示
*/
void onSjmAdShow();
/**
* 广告展示出错
*/
void onSjmAdShowError(SjmAdError adError);
/**
* 激励视频广告被点击
*/
void onSjmAdClick();
/**
* 激励视频播放完毕
*/
void onSjmAdVideoComplete();
/**
* 激励视频广告曝光
*/
void onSjmAdExpose();
/**
* 激励视频触发激励(观看视频大于一定时长或者视频播放完毕)
*/
void onSjmAdReward(String adid) ;
/**
* 激励视频广告被关闭
*/
void onSjmAdClose() ;
/**
* 广告流程出错
*/
void onSjmAdError(SjmAdError adError) ;
}
SjmRewardVideoAd rewardVideoAD = new SjmRewardVideoAd(this, "广告位id", this);
rewardVideoAD.setUserId("自身应用当前的userid");
rewardVideoAD.setRewardName("积分奖励"); //激励奖励名称
rewardVideoAD.setRewardAmount(1); //激励奖励数
rewardVideoAD.setExtra("extStr"); //拓展参数
rewardVideoAD.loadAd();
==================SjmRewardVideoAdListener==================
/**
* 广告加载成功
**/
@Override
public void onSjmAdLoaded(String adId){
adLoaded = true;
showStatus("onSjmAdLoad:广告加载成功");
}
/**
* 视频素材缓存成功,可在此回调后进行广告展示
*/
@Override
public void onSjmAdVideoCached(){
videoCached = true;
showStatus("onSjmAdVideoCached:视频素材缓存成功,可在此回调后进行广告展示");
//可以展示,视频已经缓存,展示没有进度条
rewardVideoAD.showAD();
}
本SDK为接入方提供个性化模板插屏广告,开发者不用自行对广告样式进行编辑和渲染,可直接调用相关接口获取广告 view,广告样式模板以及微调后期支持开发者编辑。
public class SjmInterstitialAd{
public SjmInterstitialAd(Activity activity, String posId, SjmInterstitialAdListener adListener);
public void loadAd();
public void showAd();
}
public interface SjmInterstitialAdListener{
void onSjmAdLoaded();
void onSjmAdShow();
void onSjmAdClicked();
void onSjmAdError(SjmAdError adError);
void onSjmAdClosed();
}
SjmInterstitialAd interstitialAd = new SjmInterstitialAd(this, "广告位id", this);
interstitialAd.loadAd();
==================SjmInterstitialAdListener==================
/**
* 广告加载成功,可在此回调后进行广告展示
*/
void onSjmAdLoaded(){
//展示广告
interstitialAd.showAd();
}
本SDK为接入方提供个性化模板 Banner 广告,开发者不用自行对广告样式进行编辑和渲染, Banner 广告为一个 View,需要传入一个承载容器 ViewGroup,广告样式模板以及微调后期支持开发者编辑。
public class SjmBannerAd{
public SjmBannerAd(Activity activity, String posId, SjmBannerAdListener adListener);
public SjmBannerAd(Activity activity, String posId, SjmBannerAdListener adListener, ViewGroup container);
public void loadAD()
//在loadAd前设置
public void setBannerContainer(ViewGroup container);
}
public interface SjmBannerAdListener{
void onSjmAdLoaded();
void onSjmAdShow();
void onSjmAdClicked();
void onSjmAdClosed();
void onSjmAdError(SjmAdError var1);
}
SjmBannerAd bannerAd = new SjmBannerAd(this, "广告位id", this);
bannerAd.setBannerContainer(bannerContainer);
bannerAd.loadAD();
本SDK为接入方提供全屏视频广告,该广告的效果播放全屏的视频,视频一定时间后可跳过,无需全程观看完。
public class SjmFullScreenVideoAd{
public SjmFullScreenVideoAd(Activity activity, String podId, SjmFullScreenVideoAdListener adListener);
public void loadAD();
public void showAd();
}
public interface SjmFullScreenVideoAdListener{
void onSjmAdLoaded();
void onSjmAdShow();
void onSjmAdClicked();
void onSjmAdError(SjmAdError adError);
void onSjmAdVideoCached();
void onSjmAdClosed();
void onSjmAdVideoComplete();
}
SjmFullScreenVideoAd fullScreenVideo = new SjmFullScreenVideoAd(this, "广告位id", this);
fullScreenVideo.loadAd();
==================SjmInterstitialAdListener==================
void onSjmAdVideoCached(){
fullScreenVideo.showAd();
}
本SDK为接入方提供全屏竖版视频流广告,该广告适合在全屏竖版视频流中使用,接入方可以控制视频暂停或继续播放,默认视频播放不可干预,视频广告相关配置可以在平台设置。
支持的广告尺寸: 全屏竖版
//拉取多个SjmExpressFeedFullVideoAd(1-3)
public class SjmExpressFeedFullVideo{
public SjmExpressFeedFullVideo(Activity activity, String posId, SjmExpressFeedFullVideoListener adListener);
public SjmExpressFeedFullVideo(Activity activity, String posId, SjmSize viewSize, SjmExpressFeedFullVideoListener adListener)
public void loadAd();
public void loadAd(int count); //count取值范围1-3
}
public interface SjmExpressFeedFullVideoListener{
void onSjmAdError(SjmAdError error);
void onSjmFeedFullVideoLoad(List<SjmExpressFeedFullVideoAd> ads);
}
SjmSize size = new SjmSize(1080, 1920);//size参数大小单位是dp
SjmExpressFeedFullVideo expressFullVideoFeed = new SjmExpressFeedFullVideo(this, "广告位id", size, new SjmExpressFeedFullVideoListener(){
@Override
public void onSjmAdError(SjmAdError error){
Log.d("test", "SjmExpressFullVideoFeed2.onSjmAdError=" + error.getErrorMsg());
}
@Override
public void onSjmFeedFullVideoLoad(List<SjmExpressFeedFullVideoAd> ads){
Log.d("test", "SjmExpressFeedFullVideo.onSjmFeedFullVideoLoad");
}
expressFullVideoFeed.loadAd(1);
本SDK为接入方提供原生模版信息流广告。
适用场景:
分类:
public class SjmNativeExpressAd{
public SjmNativeExpressAd(Activity activity, String podId, SjmNativeExpressAdListener adListener, ViewGroup container);
public void setSize(SjmSize SjmSize);
public void loadAd();
}
public interface SjmNativeExpressAdListener{
void onSjmAdLoaded();
void onSjmAdShow();
void onSjmAdClicked();
void onSjmAdError(SjmAdError adError);
void onSjmAdClosed();
}
SjmNativeExpressAd nativeExpressAd = new SjmNativeExpressAd(this, "广告位id", this, adContainer);
nativeExpressAd.setSize(new SjmSize(width, 0)); //width单位为dp,height=0为自适应高度
nativeExpressAd.loadAd();
本SDK为接入方提供原生模版信息流列表广告,用于将信息流广告插入列表的场景。
public class SjmNativeExpressAdList{
public SjmNativeExpressAdList(Activity activity, String posId, SjmNativeExpressAdListListener adListener);
/**
* 信息流内容为视频时是否开启视频声音
*/
public void setAutoPlay(boolean volumeOn);
/**
* 设置广告的尺寸,单位为DP
*/
public void setSize(SjmSize SjmSize);
/**
* 加载广告
*/
public void loadAd(int i);
}
public interface SjmNativeExpressAdListListener {
/**
* 加载成功
*/
void onSjmNativeExpressAd(List<SjmNativeAd> ads);
/**
* 加载失败
*/
void onSjmAdError(SjmAdError error);
}
SjmNativeExpressAdList expressAdList = new SjmNativeExpressAdList(this, "posId", new SjmNativeExpressAdListListener() {
@Override
public void onSjmNativeExpressAd(List<SjmNativeAd> adList) {
if (mRecyclerView != null) {
mRecyclerView.setLoadingFinish();
}
if (adList == null || adList.isEmpty()) {
return;
}
int totalCount = mFeedList.size();
for (SjmNativeAd SjmNativeAd : adList) {
if (SjmNativeAd == null) {
continue;
}
mFeedList.add(mFeedList.size(), new TestBean(SjmNativeAd, FeedRecyclerAdapter.ItemViewType.ITEM_VIEW_TYPE_AD));
}
mFeedRecyclerAdapter.notifyDataSetChanged();
}
@Override
public void onSjmAdError(SjmAdError error) {
if (mRecyclerView != null) {
mRecyclerView.setLoadingError();
}
}
});
expressAdList.setAutoPlay(true);
expressAdList.setSize(new SjmSize(getScreenWidthDp(), 0)); //宽度单位为DP,高度0为自适应高度
expressAdList.loadAd(1);
==================RecyclerView.Adapter==================
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
if (viewHolder instanceof AdViewHolder) {
final AdViewHolder adViewHolder = (AdViewHolder) viewHolder;
final SjmNativeAd SjmNativeAd = (SjmNativeAd) mDataList.get(position).object;
// 设置监听
SjmNativeAd.setExpressInteractionListener(new SjmNativeAd.FeedFullVideoAdInteractionListener() {
@Override
public void onAdClicked(View view, int type) {
}
@Override
public void onAdShow(View view, int type) {
}
@Override
public void onRenderSuccess(View view, float width, float height) {
Log.d("main", "onRenderSuccess");
}
@Override
public void onRenderFail(View view, SjmAdError error) {
}
});
SjmNativeAd.render(adViewHolder.mAdContainer);
}
}
前文介绍的 Banner 广告、插屏广告等,app会“收到”一个完整的 view 对象,开发者无法自定义广告 view 内部的组件布局(文字 TextView 、图片 ImageView ),而原生广告自渲染方式支持开发者自由拼合这些素材,最大程度的满足开发需求;与原生广告(模板方式)相比,自渲染方式更加自由灵活,开发者可以使用其为开发者的应用打造自定义的布局样式。
前提条件:
MediaView
内部使用了TextureView
,所以需要在开启硬件加速的窗口中才能使用。当 Android API>=14时,硬件加速默认是开启的适用场景:
使用自渲染 2.0 API拉取到的广告数据主要包含如下字段:
//负责加载
public class SjmNativeAd{
public SjmNativeAd(Activity activity, String posId, SjmNativeAdListener adListener);
public void loadAd();
}
//广告数据
public class SjmNativeAdData {
/**
* 将布局与广告进行绑定
*/
public void bindAdToView(Context context, SjmNativeAdContainer container, FrameLayout.LayoutParams layoutParams, List<View> views);
/**
* 将布局与视频组件MediaView进行绑定
*/
public void bindMediaView(SjmMediaView mediaView, SjmNativeAdMediaListener adListener);
/**
* 设置回调
*/
public void setNativeAdEventListener(SjmNativeAdEventListener eventListener);
/**
* 获取广告标题,短文字
*/
public String getTitle();
/**
* 获取广告描述,长文字
*/
public String getDesc();
/**
* 获取Icon 图片地址
*/
public String getIconUrl();
/**
* 获取大图地址
*/
public String getImgUrl();
/**
* 获取广告样式
* @see com.Sjm.Sjmsdk.ad.SjmAdPatternType
*/
public int getAdPatternType();
/**
* 获取三小图的地址
*/
public List<String> getImgList();
/**
* 判断是否为app广告
*/
public boolean isAppAd();
/**
* 获取应用状态
*/
public int getAppStatus();
/**
* 获取广告的视频时长,广告加载成功即可获取,单位ms。
* 注意:虽然此数值单位为ms,但实际精度为s(向上取整),例如视频真实时长 8100ms ,此处返回9000ms
*/
public int getVideoDuration();
/**
* 获取大图素材的宽度
*/
public int getPictureWidth();
/**
* 获取大图素材的高度
*/
public int getPictureHeight();
/**
* 当宿主Activity.onResume()时调用,恢复广告状态,如果不调用会导致广告状态错乱
*/
public void resume();
/**
* 当开发者不再使用广告,释放View等相关的资源,且广告失效,不能再次使用
*/
public void destroy();
}
<!-- 自渲染容器 -->
<com.Sjm.Sjmsdk.ad.natives.SjmNativeAdContainer
android:id="@+id/nativeAdContainer"
android:layout_height="match_parent"
android:layout_width="match_parent">
<LinearLayout
android:id="@+id/ad_ui_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:visibility="visible">
<!-- 原生广告的标题 -->
<TextView
android:id="@+id/text_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="标题"
android:ellipsize="end"
android:singleLine="true"
android:textColor="#e0000000" />
<!-- 原生广告的描述 -->
<TextView
android:id="@+id/text_desc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="描述"
android:ellipsize="end"
android:maxLines="2"
android:textColor="#a0000000" />
........
public interface SjmNativeAdListener {
void onSjmNativeAdLoaded(SjmNativeAdData adData);
void onSjmAdError(SjmAdError adError);
}
SjmNativeAd nativeAd = new SjmNativeAd(this, "广告位id", new SjmNativeAdListener() {
@Override
public void onSjmNativeAdLoaded(SjmNativeAdData SjmNativeAdData) {
this.adData = SjmNativeAdData;
renderAdUi(adData);
bindAdEvent(adData);
}
@Override
public void onSjmAdError(SjmAdError SjmAdError) {
showError("onSjmAdError", SjmAdError.getErrorCode(), SjmAdError.getErrorMsg());
}
});
nativeAd.loadAd();
SjmNativeAdContainer
内提供一个视频内容频道供接入方接入,支持上下滑动切换视频内容。
前提条件:
(1)要支持androidx
库
(2)需要support-v4
或androidx.legacy:legacy-support-v4
库
public class SjmContentAd{
public SjmContentAd(Activity activity, SjmContentAdListener adListener, String posId);
public void showAd(int layoutId);
public void hideAd();
}
public interface SjmContentAdListener {
void onSjmAdError(SjmAdError adError);
void onPageEnter(KsContentPage.ContentItem item);
void onPageResume(KsContentPage.ContentItem item);
void onPagePause(KsContentPage.ContentItem item);
void onPageLeave(KsContentPage.ContentItem item);
void onVideoPlayStart(KsContentPage.ContentItem item);
void onVideoPlayPaused(KsContentPage.ContentItem item);
void onVideoPlayResume(KsContentPage.ContentItem item);
void onVideoPlayCompleted(KsContentPage.ContentItem item);
void onVideoPlayError(KsContentPage.ContentItem item, int what, int extra);
}
SjmContentAd contentAd = new SjmContentAd(this, this, "广告位id");
contentAd.showAd(R.id.main_container);
SDK为接入方提供了定制H5内容页:游戏,测试,积分消耗...
public class SjmUser{
public String userID; //用户ID
public String userName; //用户名
public String userAvatar; //用户头像URL
public int userIntegral; //用户积分
public String deviceid; //设备号 *android10以下传imei,10以上传oaid*
public String ext = ""; //扩展参数
public SjmUser(String userID, String userName, String userAvatar, int userIntegral)
public SjmUser(String userID, String userName, String userAvatar, int userIntegral, String deviceId)
}
public class SjmH5Ad{
public SjmH5Ad(Activity activity, SjmUser SjmUser, SjmH5ContentListener adListener, String posId);
}
public interface SjmH5ContentListener {
/**
* 积分不够
*/
void onIntegralNotEnough(SjmUser user, int needIntegral);
/**
* 积分消耗
* expendIntegral>0,用户消耗了多少积分
* expendIntegral<0,用户任务完成领取了多少积分
*/
void onIntegralExpend(SjmUser user, int expendIntegral);
/**
* 返回的是完成的任务总数
*/
void onFinishTasks(SjmUser user, int finishTasks);
/**
* 退出H5
*/
void onGameExit(SjmUser user);
/**
* 看广告奖励触发,此接口是完成总任务数返回的奖励接口
*/
void onSjmAdReward(SjmUser user, int rewardIntegral);
/**
* h5页面中激励视频触发激励(观看视频大于一定时长或者视频播放完毕)
*/
void onSjmAdReward(String adId);
/**
* h5页面中观看激励视频时视频加载成功的返回事件
*/
void onSjmAdLoaded(String adId);
/**
* 每次广告加载成功,会在此回调生成一个唯一的广告id
*/
void onSjmAdTradeId(String trade_id);
/**
* h5页面中观看激励视频时的点击广告的返回事件
*/
void onSjmAdClick();
/**
* 用户页面的行为操作
* joinLottery --> 参与抽奖
* joinSurvey --> 参与测一测
* joinGuessingIdioms --> 参与猜成语
* stay60s --> 咨询浏览超过60s的回调
* joinGame --> 参与游戏
* taskSignIn --> 签到成功
*/
void onSjmUserBehavior(String behavior);
}
//deviceId:android10以下传imei,10以上传oaid
SjmUser Sjmuser = new SjmUser("userID", "userName", "avatarUrl", (int) userIntegral, "deviceId");
SjmH5Ad h5Ad = new SjmH5Ad(activity, Sjmuser, SjmH5ContentListener, "广告位id");
重写加载SjmH5Ad
的activity
的onDestroy
方法
@Override
protected void onDestroy() {
super.onDestroy();
if (h5Ad != null)
h5Ad.onDestory();
}
开发者如果需要配置隐私权限开关,则需要在每次初始化SDK前调⽤SjmCustomController.getInstance().setCustomController(SjmCustomController
.Controller customController)
方法名 | 简介 |
---|---|
boolean canReadLocation() | 是否允许SDK主动使⽤地理位置信息(true:可以获取,false禁⽌获取。默认为true) |
Location getLocation() | 当canReadLocation()==false时,可传⼊地理位置信息,sdk使⽤您传⼊的地理位置信息 |
boolean canUsePhoneState() | 是否允许SDK主动使⽤⼿机硬件参数(imei,meid,imsi,iccid),true:可以使⽤,false禁⽌使⽤。默认为true |
String getImei() | 当canUsePhoneState()==false时,可传⼊原始的imei信息,sdk使⽤您传的原始imei信息 |
String[] getImeis() | 当canUsePhoneState()==false时,可传⼊原始的imei信息(sdk使⽤您传⼊的原始imei信息。传⼊的是数组,imei个数和⼿机卡个数相同) |
boolean canUseAndroidId() | 是否允许主动获取AndroidID(true:允许获取,false禁⽌⽤。默认为true) |
String getAndroidId() | 当canUsePhoneState()==false时,可传⼊android_id信息(sdk将使⽤您传⼊的android_id) |
boolean canUseMacAddress() | 是否允许SDK主动使⽤mac_address(true:允许使⽤,false禁⽌使⽤。默认为true) |
String getMacAddress() | 当canUseMacAddress()==false时,可传⼊mac地址信息,sdk使⽤您传⼊的mac地址信息 |
boolean canUseOaid() | 是否允许SDK主动使⽤oaid(true:可以使⽤,false禁⽌使⽤。默认为true) |
String getOaid() | 当canUseOaid()==false时,可传⼊oaid信息,sdk使⽤您传⼊的oaid信息 |
boolean canUseNetworkState() | 是否允许SDK主动使⽤ACCESS_NETWORK_STATE权限(true:可使⽤,false禁⽌使⽤。默认为true) |
boolean canUseStoragePermission() | 是否允许SDK主动使⽤存储权限(true:可以使⽤,false禁⽌使⽤。默认为true) |
boolean canReadInstalledPackages() | 是否允许SDK主动读取app安装列表(true:可以使⽤,false禁⽌使⽤。默认为true) |
public List |
当canReadInstalledPackages()==false 时可传⼊已安装应⽤列表信息(sdk将使⽤您传⼊的已安装应⽤列表) |
public canGetSensorManager() | 是否允许SDK主动传感器权限(true:可以使⽤,false禁⽌使⽤。默认为true)) |
SjmSplashAd
对象,避免获取container失败而导致的crash。applicationId
修改为 demo 工程的applicationId
,并使用demo中的广告位id进行测试。开屏广告SjmSplashAd
对象不可以在应用的SplashActivity#onCreate
生命周期内直接创建,需要延时1000ms左右再进行new操作,参考代码
ViewGroup container = (ViewGroup) this.findViewById(R.id.splash_container);
container.postDelayed(()->{
SjmSplashAd SjmSplashAd = new SjmSplashAd(this, this, pos_id, 3);
}, 1000);
提示"开屏广告容器的高度低于400dp"时,需要修改容器的高度大于设备屏幕高度的75%
build.gradle
中是否依赖了Sjm_kssdk.aar
AndroidManifest.xml
的<Application>
标签下配置android:hardwareAccelerated="true"
来开启硬件加速