Android端:
1.环境:HX2.9.8、离线Android-SDK@2.9.8.80513_20201111、AdnroidStudio3.6.3;
2.解压离线包,由于我们公司都是离线打包,用到的是HBuilder-Hello这个工程,导入as中;
3.新建Module
微信截图_20201201121601.png
4.在插件中导入uniapp和google视频必要的库,zhj-googlead/build.gradle中提那添加如下:
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.alibaba:fastjson:1.1.46.android'
compileOnly fileTree(dir: '../app/libs', include: ['<a href="https://www.xiaowo6.cn/t/UniApp.html" >uniapp</a>-release.aar'])
// 添加google视频所需要的库
implementation 'com.google.android.gms:play-services-ads:19.5.0'
}
5.app/build.gradle也需要添加依赖
dependencies {
...
// 添加uni-app插件
implementation project(':zhj-googlead')
// 添加google视频所需要的库
implementation 'com.google.android.gms:play-services-ads:19.5.0'
}
6.注:
前提条件
使用 Android Studio 3.2 或更高版本
minSdkVersion 16 或更高版本
compileSdkVersion 28 或更高版本
详情见:https://developers.google.cn/admob/android/quick-start
7.兼容AndroidX,若为老项目android.support,需在gradle.properties中添加:
android.enableJetifier=true
android.useAndroidX=true
详情见:https://www.jianshu.com/p/41de8689615d
8.新增插件接口与视频接入:
1)新建类GoogleAdModule,此为插件开发模式,必须继承UniModule,通过onGoogleAdModule拉起一个Activity,源码如下:
package com.example.zhj_googlead;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import com.alibaba.fastjson.JSONObject;
import io.dcloud.feature.uniapp.annotation.UniJSMethod;
import io.dcloud.feature.uniapp.bridge.UniJSCallback;
import io.dcloud.feature.uniapp.common.UniModule;
public class GoogleAdModule extends UniModule {
String TAG = "GoogleAdModule";
public static int REQUEST_CODE = 1000;
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == REQUEST_CODE && data.hasExtra("respond")) {
Log.e("GoogleAdModule", "----"+data.getStringExtra("respond"));
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
@UniJSMethod (uiThread = true)
public void onGoogleAdModule(){
Log.e(TAG, "gotoNativePage--");
if(mUniSDKInstance != null && mUniSDKInstance.getContext() instanceof Activity) {
Intent intent = new Intent(mUniSDKInstance.getContext(), NativePageActivity.class);
((Activity)mUniSDKInstance.getContext()).startActivityForResult(intent, REQUEST_CODE);
}
}
}
2)新建一个Activity,用户广告初始化以及加载播放,源码如下:
package com.example.zhj_googlead;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.ads.AdError;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.LoadAdError;
import com.google.android.gms.ads.rewarded.RewardItem;
import com.google.android.gms.ads.rewarded.RewardedAd;
import com.google.android.gms.ads.rewarded.RewardedAdCallback;
import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback;
public class NativePageActivity extends Activity {
String TAG = "NativePageActivity";
private static final String AD_UNIT_ID = "ca-app-pub-3940256099942544/5224354917";
private RewardedAd rewardedAd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrameLayout rootView = new FrameLayout(this);
TextView textView = new TextView(this);
textView.setTextColor(Color.BLACK);
textView.setTextSize(30);
textView.setText("视频加载中,请稍等...");
rootView.addView(textView, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 300));
setContentView(rootView);
rewardedAd = new RewardedAd(this,AD_UNIT_ID);
RewardedAdLoadCallback adLoadCallback = new RewardedAdLoadCallback() {
@Override
public void onRewardedAdLoaded() {
// Ad successfully loaded.
Log.e(TAG, "Ad successfully loaded.--");
showRewardedVideo();
}
@Override
public void onRewardedAdFailedToLoad(LoadAdError adError) {
// Ad failed to load.
Log.e(TAG, "Ad failed to load."+adError);
navigateBack();
}
};
rewardedAd.loadAd(new AdRequest.Builder().build(), adLoadCallback);
}
private void showRewardedVideo() {
if (rewardedAd.isLoaded()) {
RewardedAdCallback adCallback = new RewardedAdCallback() {
@Override
public void onRewardedAdOpened() {
// Ad opened.
navigateBack();
}
@Override
public void onRewardedAdClosed() {
// Ad closed.
navigateBack();
}
@Override
public void onUserEarnedReward(RewardItem rewardItem) {
// User earned reward.
navigateBack();
}
@Override
public void onRewardedAdFailedToShow(AdError adError) {
// Ad failed to display.
navigateBack();
}
};
rewardedAd.show(this, adCallback);
} else {
Log.d("TAG", "The rewarded ad wasn't loaded yet.");
}
}
private void navigateBack(){
Intent intent = new Intent();
intent.putExtra("respond", "我是原生页面");
setResult(GoogleAdModule.REQUEST_CODE, intent);
finish();
}
}
9.配置XML,zhj-googlead中AndroidManifest.xml,需添加
<application>
<activity android:name="com.example.zhj_googlead.NativePageActivity"
android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar"></activity>
</application>
app下AndroidManifest.xml中需添加:
<!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 为测试id,上线请置换 -->
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-3940256099942544~3347511713"/>
10.app/src/amin/assets下新建dcloud_uniplugins.json文件,内容如下,用于uni.requireNativePlugin读取:
{
"nativePlugins": [
{
"plugins": [
{
"type": "module",
"name": "GoogleAdModule",
"class": "com.example.zhj_googlead.GoogleAdModule"
}
]
}
]
}
11.uniapp部分,不用怎么解释,直接先uni.requireNativePlugin("GoogleAdModule")加载,然后直接使用
GoogleAdModule.onGoogleAdModule();
12.上线后需修改AD_UNIT_ID,简单接入,还需处理播放成功回调等;
--end