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

点赞(0)

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

返回
顶部