1、概述
1.1 面向读者
本产品面向需要在Android Studio中接入ZPLAYAds SDK的Android开发人员
1.2 开发环境
操作系统:WinAll, Linux, Mac
开发环境:Android Studio 2.x
部署目标:Android 4.0及以上
1.3 术语介绍
APPID:应用ID,是您在ZPLAYAds平台创建媒体时获取的ID;
adUnitID:广告位ID,是ZPLAYAds平台为您的应用创建的广告位置的ID。
2.SDK接入
2.1 添加依赖
在app项目的build.gradle中添加以下代码
dependencies {
compile 'com.playableads:playableads:1.0.6'
compile 'com.google.android.gms:play-services-ads:11.0.4'
}
2.2 同步项目
点击菜单栏“同步”(Sync Project with Gradle Files)按钮,下载依赖
3.代码接入
3.1 初始化SDK
调用PlayableAds.init(context, APPID, adUnitID)代码初始化SDK
3.2 请求广告
调用PlayableAds.getInstance().requestPlayableAds(playPreloadingListener)加载广告,
listener回调方法说明:
public interface PlayPreloadingListener {
// 广告加载完成
void onLoadFinished();
// 广告加载失败
void onLoadFailed(int errorCode, String msg);
}
请求示例:
PPlayableAds.getInstance().requestPlayableAds(new PlayPreloadingListener() {
@Override
public void onLoadFinished() {
// 广告加载完成,可以调用presentPlayableAd(...)方法展示广告了
}
@Override
public void onLoadFailed(int errorCode, String message) {
// 广告加载失败,根据错误码和错误信息定位问题
}
})
3.3 展示广告
调用PlayableAds.getInstance().presentPlayableAD(this, playLoadingListener)展示广告,
listener回调方法说明:
public interface PlayLoadingListener {
// 完成整个广告事务(游戏展示,游戏试玩和落地页退出)后的回调,表示可以下发奖励
void playableAdsIncentive();
// 展示过程中出现错误
void onAdsError(int code, String msg);
}
请求示例:
PlayableAds.getInstance().presentPlayableAD(activity, new PlayLoadingListener() {
@Override
public void playableAdsIncentive() {
// 广告展示完成,回到原页面,此时可以给用户奖励了。
}
@Override
public void onAdsError(int errorCode, String message) {
// 广告展示失败,根据错误码和错误信息定位问题
}
});
4.混淆处理
如果项目做混淆,请将以下代码放到proguard-rules.pro文件或自定义文件中
# playableAds
-keep class com.playableads.PlayPreloadingListener {*;}
-keep class com.playableads.PlayLoadingListener {*;}
-keep class * implements com.playableads.PlayPreloadingListener {*;}
-keep class * implements com.playableads.PlayLoadingListener {*;}
-keep class com.playableads.PlayableAds {
public void onDestroy();
public static com.playableads.PlayableAds getInstance();
public void requestPlayableAds(com.playableads.PlayPreloadingListener);
public void requestPlayableAds(java.lang.String, com.playableads.PlayPreloadingListener);
public synchronized static com.playableads.PlayableAds init(android.content.Context, java.lang.String, java.lang.String);
public void presentPlayableAD(android.content.Context, com.playableads.PlayLoadingListener);
public boolean canPresentAd();
}
4.混淆处理
这里是完整Demo
public class MainActivity extends Activity {
private static final int REQUEST_CODE = 2;
private TextView info;
private EditText mAppIdEdit;
private EditText mUnitIdEdit;
private ScrollView mScrollView;
PlayableAds mAds;
private View mPresentView;
private View mRequestView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
info = (TextView) findViewById(R.id.text);
mAppIdEdit = (EditText) findViewById(R.id.appId);
mUnitIdEdit = (EditText) findViewById(R.id.unitId);
mScrollView = (ScrollView) findViewById(R.id.scrollView);
mRequestView = findViewById(R.id.request);
mPresentView = findViewById(R.id.present);
mPresentView.setEnabled(false);
mAds = PlayableAds.init(this, "androidDemoApp", "androidDemoAdUnit");
}
public void request(View view) {
mRequestView.setEnabled(false);
mPresentView.setEnabled(false);
checkWritePermission();
String appId = mAppIdEdit.getText().toString();
String unitId = mUnitIdEdit.getText().toString();
if (!TextUtils.isEmpty(appId) && !TextUtils.isEmpty(unitId)) {
mAds = PlayableAds.init(this, appId, unitId);
}
mAds.requestPlayableAds(mPreloadingListener);
setInfo(getString(R.string.start_request));
}
private PlayPreloadingListener mPreloadingListener = new PlayPreloadingListener() {
@Override
public void onLoadFinished() {
setInfo(getString(R.string.pre_cache_finished));
mPresentView.setEnabled(true);
mRequestView.setEnabled(true);
}
@Override
public void onLoadFailed(int errorCode, String msg) {
setInfo(String.format(getString(R.string.load_failed), errorCode, msg));
mRequestView.setEnabled(true);
}
};
public void present(View view) {
if (!mAds.canPresentAd()) {
Toast.makeText(this, R.string.loading_ad, Toast.LENGTH_SHORT).show();
return;
}
mAds.presentPlayableAD(this, new PlayLoadingListener() {
@Override
public void playableAdsIncentive() {
setInfo(getString(R.string.ads_incentive));
mPresentView.setEnabled(false);
mRequestView.setEnabled(true);
}
@Override
public void onAdsError(int code, String msg) {
setInfo(getString(R.string.ads_error, code, msg));
}
});
}
private void setInfo(final String msg) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (info != null) {
info.append(msg + "\n\n");
}
mScrollView.fullScroll(View.FOCUS_DOWN);
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
mAds.onDestroy();
}
private void checkWritePermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
setInfo(getString(R.string.open_write_permission));
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 0);
}
if (checkSelfPermission(Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_DENIED) {
setInfo(getString(R.string.open_phone_permission));
requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 0);
}
}
}
}
补充说明
android端暂时只能请求一个广告,不能批量请求。
每次广告请求只能展示一次,展示完成后需要重新请求广告
由于广告资源较大,请尽可能早的请求广告。
请保证应用有电话权限、存储权限,否则可能出现一直没有广告的状态。