写这篇博客主要是为了使用Eclipse导出Jar包和Res文件去给Unity调用。之前我写过一篇博客(https://www.cnblogs.com/weiqiangwaideshijie/p/7715861.html)是直接将Unity导出Android工程去接入SDK,现在换另外一种模式去接入SDK,使用的通讯框架还是之前的。

一  为了避免不必要的错误,我这边是用Unity去导出一个空的Android工程而不是直接在Eclipse去直接新建一个acivity,再去引用Unity的Classes.jar文件。用Eclipse打开unity导出的空的工程,然后将之前写的通讯框架导入进去,并且删除untiy自带的三个类

二  UnityPlayerActivity引用头条的库文件(箭头所指的),在将头条的Res文件给copy到UnityPlayerActivtiy里面,不要去覆盖,不然Unity自带的一些东西被覆盖掉,导致manifest里面找不到对应的配置和资源。

三 然后配置我们的Manifest清单文件,这个直接CopyDemo里面自己需要的配置就可以了。

四 以上的步骤,我们就把环境给配置好了,最后,按照文档去写入播放广告的代码。我这边直接入奖励广告。(下面有些和Unity交互代码是这个项目不需要的,看加粗倾斜的代码块)

MainActivity

package com.cw.androidsdk;

import android.os.Bundle;

import com.bytedance.sdk.openadsdk.AdSlot;

import com.bytedance.sdk.openadsdk.TTAdConfig;

import com.bytedance.sdk.openadsdk.TTAdConstant;

import com.bytedance.sdk.openadsdk.TTAdManager;

import com.bytedance.sdk.openadsdk.TTAdNative;

import com.bytedance.sdk.openadsdk.TTAdSdk;

import com.bytedance.sdk.openadsdk.TTAppDownloadListener;

import com.bytedance.sdk.openadsdk.TTFullScreenVideoAd;

import com.bytedance.sdk.openadsdk.TTRewardVideoAd;

import com.sdk.api.SDKAPI;

import com.sdk.api.SDKUtility;

import com.unity3d.player.UnityPlayer;

import com.unity3d.player.UnityPlayerActivity;

import java.util.UUID;

import org.json.JSONException;

import org.json.JSONObject;

import android.R.string;

import android.app.Activity;

import android.app.AlertDialog;

import android.content.DialogInterface;

import android.content.Intent;

import android.graphics.PixelFormat;

import android.os.Handler;

import android.os.Looper;

import android.os.Message;

import android.text.TextUtils;

import android.util.Log;

import android.view.Window;

import android.widget.Toast;public classMainActivity extends UnityPlayerActivity

{public staticActivity CurrentActivity;public static MyHandler myHandler;//

privateTTAdNative mTTAdNative;privateTTRewardVideoAd mttRewardVideoAd;privateTTAdManager ttAdManager;

@Overrideprotected voidonCreate(Bundle arg0) {//TODO Auto-generated method stub

super.onCreate(arg0);

CurrentActivity=this;

myHandler=newMyHandler();//如果明确某个进程不会使用到广告SDK,可以只针对特定进程初始化广告SDK的content//if (PROCESS_NAME_XXXX.equals(processName)) {//TTAdSdk.init(context, config);//}

}

@Overrideprotected voidonStart() {

super.onStart();

}

@Overrideprotected voidonPause() {

super.onPause();

}

@Overrideprotected voidonResume() {

super.onResume();

}public voidonNewIntent(Intent newIntent){

super.onNewIntent(newIntent);

}

@Overrideprotected voidonStop() {

super.onStop();

}

@Overrideprotected voidonDestroy() {

super.onDestroy();

}

@Overrideprotected voidonRestart() {

super.onRestart();

}public classMyHandler extends Handler

{publicMyHandler()

{

}publicMyHandler(Looper L) {

super(L);

}/** 锟斤拷锟斤拷锟斤拷锟斤拷锟叫达拷梅锟斤拷锟斤拷锟斤拷锟斤拷芨锟斤拷锟较�

**/@Overridepublic voidhandleMessage(Message msg)

{if(msg.what==SDKUtility.Init)

{//"5001121"

Log.i("android", "Init");//Toast.makeText(CurrentActivity, "Init", Toast.LENGTH_SHORT).show();

TTAdSdk.init(CurrentActivity,newTTAdConfig.Builder()

.appId(SDKAPI.AppID)

.useTextureView(false) //使用TextureView控件播放视频,默认为SurfaceView,当有SurfaceView冲突的场景,可以使用TextureView

.appName("APP测试媒体")

.titleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK)

.allowShowNotify(true) //是否允许sdk展示通知栏提示

.allowShowPageWhenScreenLock(true) //是否在锁屏场景支持展示广告落地页

.debug(false) //测试阶段打开,可以通过日志排查问题,上线时去除该调用

.directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI, TTAdConstant.NETWORK_STATE_3G) //允许直接下载的网络状态集合

.supportMultiProcess(false) //是否支持多进程,true支持

.build());

ttAdManager=TTAdSdk.getAdManager();

mTTAdNative=TTAdSdk.getAdManager().createAdNative(CurrentActivity);//Toast.makeText(CurrentActivity, "初始化", Toast.LENGTH_SHORT).show();

}else if(msg.what==SDKUtility.Load_Full_ScreenVideo)

{//901121430

Log.i("android", "loadAd");//Toast.makeText(CurrentActivity, "loadAd", Toast.LENGTH_SHORT).show();

loadAd(SDKAPI.AdsID, TTAdConstant.HORIZONTAL);else if(msg.what==SDKUtility.LoginIn)

{

Log.i("android", "LoginIn");

}else if(msg.what==SDKUtility.LoginOut)

{

Log.i("android", "logout");

}else if(msg.what==SDKUtility.Pay)

{

}else if(msg.what==SDKUtility.OnExit)

{

}else if(msg.what==SDKUtility.SubmitExtraDataOnEnterGame)

{

}else if(msg.what==SDKUtility.SubmitExtraDataOnExitGame)

{

}else if(msg.what==SDKUtility.GamePause)

{

Log.i("android", "GamePause"}private boolean mHasShowDownloadActive = false;private void loadAd(String codeId, intorientation) {//step4:创建广告请求参数AdSlot,具体参数含义参考文档

AdSlot adSlot = newAdSlot.Builder()

.setCodeId(codeId)

.setSupportDeepLink(true)

.setImageAcceptedSize(1080, 1920)

.setRewardName("金币") //奖励的名称

.setRewardAmount(3) //奖励的数量

.setUserID("user123")//用户id,必传参数

.setMediaExtra("media_extra") //附加参数,可选

.setOrientation(orientation) //必填参数,期望视频的播放方向:TTAdConstant.HORIZONTAL 或 TTAdConstant.VERTICAL

.build();//step5:请求广告

mTTAdNative.loadRewardVideoAd(adSlot, newTTAdNative.RewardVideoAdListener() {

@Overridepublic void onError(intcode, String message) {

Log.i("android", message);//Toast.makeText(CurrentActivity, message, Toast.LENGTH_SHORT).show();

UnityPlayer.UnitySendMessage("TouTiaoSDKMgr", "UnCanPlay", "");

}//视频广告加载后,视频资源缓存到本地的回调,在此回调后,播放本地视频,流畅不阻塞。

@Overridepublic voidonRewardVideoCached() {//Toast.makeText(CurrentActivity, "onRewardVideoCached", Toast.LENGTH_SHORT).show();

UnityPlayer.UnitySendMessage("TouTiaoSDKMgr", "CanPlay", "");

}//视频广告的素材加载完毕,比如视频url等,在此回调后,可以播放在线视频,网络不好可能出现加载缓冲,影响体验。

@Overridepublic voidonRewardVideoAdLoad(TTRewardVideoAd ad) {

Log.i("android", "加载完毕");

mttRewardVideoAd=ad;

UnityPlayer.UnitySendMessage("TouTiaoSDKMgr", "CanPlay", "");//mttRewardVideoAd.setShowDownLoadBar(false);

mttRewardVideoAd.setRewardAdInteractionListener(newTTRewardVideoAd.RewardAdInteractionListener() {

@Overridepublic voidonAdShow() {//Toast.makeText(CurrentActivity, "onAdShow", Toast.LENGTH_SHORT).show();

UnityPlayer.UnitySendMessage("TouTiaoSDKMgr", "AdShow", "");

}

@Overridepublic voidonAdVideoBarClick() {//Toast.makeText(CurrentActivity, "onAdVideoBarClick", Toast.LENGTH_SHORT).show();

}

@Overridepublic voidonAdClose() {//Toast.makeText(CurrentActivity, "onAdClose", Toast.LENGTH_SHORT).show();

}//视频播放完成回调

@Overridepublic voidonVideoComplete() {//Toast.makeText(CurrentActivity, "onVideoComplete", Toast.LENGTH_SHORT).show();

UnityPlayer.UnitySendMessage("TouTiaoSDKMgr", "OnAdPlayComplete", "");

}//视频播放完成后,奖励验证回调,rewardVerify:是否有效,rewardAmount:奖励梳理,rewardName:奖励名称

@Overridepublic void onRewardVerify(boolean rewardVerify, intrewardAmount, String rewardName) {//Toast.makeText(CurrentActivity, rewardVerify+" "+rewardAmount+" "+rewardName, Toast.LENGTH_SHORT).show();

}

@Overridepublic voidonVideoError() {//Toast.makeText(CurrentActivity, "onVideoError", Toast.LENGTH_SHORT).show();

UnityPlayer.UnitySendMessage("TouTiaoSDKMgr", "OnPlayFail", "");

}

});

mttRewardVideoAd.setDownloadListener(newTTAppDownloadListener() {

@Overridepublic voidonIdle() {

mHasShowDownloadActive= false;

}

@Overridepublic void onDownloadActive(long totalBytes, longcurrBytes, String fileName, String appName) {if (!mHasShowDownloadActive) {

mHasShowDownloadActive= true;//Toast.makeText(CurrentActivity, "下载中,点击下载区域暂停", Toast.LENGTH_SHORT).show();

}

}

@Overridepublic void onDownloadPaused(long totalBytes, longcurrBytes, String fileName, String appName) {//Toast.makeText(CurrentActivity, "下载暂停,点击下载区域继续", Toast.LENGTH_SHORT).show();

}

@Overridepublic void onDownloadFailed(long totalBytes, longcurrBytes, String fileName, String appName) {//Toast.makeText(CurrentActivity, "下载失败,点击下载区域重新下载", Toast.LENGTH_SHORT).show();

}

@Overridepublic void onDownloadFinished(longtotalBytes, String fileName, String appName) {//Toast.makeText(CurrentActivity, "下载失败,点击下载区域重新下载", Toast.LENGTH_SHORT).show();

}

@Overridepublic voidonInstalled(String fileName, String appName) {//Toast.makeText(CurrentActivity, "安装完成,点击下载区域打开", Toast.LENGTH_SHORT).show();}

});

}

});

}

}

SDKAIP

package com.sdk.api;

import android.R.integer;

import android.R.string;

import android.text.GetChars;

import android.util.Log;

import com.cw.androidsdk.MainActivity;public classSDKAPI {public static String AppID="";public static String AdsID="";/** SDK��ʼ��

**/

public static voidOnInit(String appId,String adsId)

{

Log.i("android", "SDKAPI OnInit");

AppID=appId;

AdsID=adsId;

Log.i("android", "appId:"+appId);

Log.i("android", "adsId:"+adsId);

MainActivity.myHandler.sendEmptyMessage(SDKUtility.Init);

}/** ����

**/

public static voidOnLogIn()

{

Log.i("android", "SDKAPI OnLogIn");

MainActivity.myHandler.sendEmptyMessage(SDKUtility.LoginIn);

}public static voidLoadAd()

{

Log.i("android", "SDKAPI LoadAd");

MainActivity.myHandler.sendEmptyMessage(SDKUtility.Load_Full_ScreenVideo);

}public static voidPlayAd()

{

Log.i("android", "SDKAPI PlayAd");

MainActivity.myHandler.sendEmptyMessage(SDKUtility.Play_Full_SrcennVideo);

}/** �dz�

**/

public static voidOnLogOut()

{

Log.i("android", "SDKAPI OnLogOut");

MainActivity.myHandler.sendEmptyMessage(SDKUtility.LoginOut);

}/** ֧��

**/

public static void OnPay(float requestAmount ,intproductIndex ,String productName,String orderID )

{

Log.i("android", "SDKAPI OnPay");

MainActivity.myHandler.sendEmptyMessage(SDKUtility.Pay);

}/** ��Ϸ��ͣ

**/

public static voidOnGamePause()

{

Log.i("android", "SDKAPI OnGamePause");

MainActivity.myHandler.sendEmptyMessage(SDKUtility.GamePause);

}/** �ύ������Ϣ

*������Ϸ

* �˳���Ϸ

*����ؿ�**/

public static void OnSubmitExtraData(intid)

{

}/** ������Ϸ�ύ����

**/

public static voidOnSubmitExtraDataOnExitGame()

{

Log.i("android", "SDKAPI OnSubmitExtraDataOnExitGame");

MainActivity.myHandler.sendEmptyMessage(SDKUtility.SubmitExtraDataOnExitGame);

}/** �˳���Ϸ�ύ����

**/

public static voidOnSubmitExtraDataOnEnterGame()

{

Log.i("android", "SDKAPI OnSubmitExtraDataOnEnterGame");

MainActivity.myHandler.sendEmptyMessage(SDKUtility.SubmitExtraDataOnEnterGame);

}/** �˳���Ϸ

**/

public static voidOnExit()

{

Log.i("android", "SDKAPI OnExit");

MainActivity.myHandler.sendEmptyMessage(SDKUtility.OnExit);

}

}

SDKUtility

package com.sdk.api;

import android.R.integer;

public class SDKUtility {

public static final int Init=0;

public static final int LoginIn=1;

public static final int LoginOut=2;

public static final int Pay=3;

public static final int GamePause=4;

public static final int SubmitExtraDataOnEnterGame=5;

public static final int SubmitExtraDataOnExitGame=6;

public static final int OnExit=7;

public static final int Load_Full_ScreenVideo=9;

public static final int Play_Full_SrcennVideo=8;

}

五 导出Jar包。注意只要导出Src文件。

用好压去打开jar包,里面就是我们这边写的通讯框架的三个文件(如果之前里面没删除unity自带的三个类,这里到处jar包的时候,就会带有那三个类,在给Unity使用的话,会报错,我们也可以在这里手动删除这三个类)

6 下面就是在Unity里面去调用了,将Jar包,Res文件和引用到的库,manifest文件导入到unity里面,目录如下:

7 编写C#脚本去调用Androidd 的接口并且接受返回的回调。

/*************

** Company: DX

**SrtiptName:TouTiaoSDKMgr

** Auth: CW

** Des: 文本描述

** Ver.: V1.0.0

*************/

using UnityEngine;

using System.Collections;

using UnityEngine.UI;

public class TouTiaoSDKMgr : MonoBehaviour

{

private AndroidJavaClass _jc = null;

private Transform Sendertran;

public static TouTiaoSDKMgr Instance;

public string appID;

public string AdsID;

public bool IsCanPlay = false;

private E_AdsType _currentAdsType = E_AdsType.Nil;

void Awake()

{

Instance = this;

_jc = new AndroidJavaClass("com.sdk.api.SDKAPI");

OnInit();

Debug.Log("Awake");

LoadAd();

}

public void OnInit()

{

Debug.Log("OnInit");

_jc.CallStatic("OnInit", appID, AdsID);

}

public void LoadAd()

{

Debug.Log("LoadAd");

_jc.CallStatic("LoadAd");

}

public void PlayAd()

{

Debug.Log("PlayAd");

_jc.CallStatic("PlayAd");

_jc.CallStatic("LoadAd");

}

///

/// 播放视频广告

///

public void PlayVideoAds(E_AdsType adsType, int id, Transform sender = null)

{

if (IsCanPlay)

{

PlayAd();

}

}

public void AdShow()

{

}

public void OnAdPlayComplete()

{

}

public void OnPlayFail()

{

}

public void CanPlay()

{

IsCanPlay = true;

}

public void UnCanPlay()

{

IsCanPlay = false;

}

}

sdk 今日头条_Unity接入今日头条广告(激励广告)相关推荐

  1. (从零开始)Cocos 3.6.0 接入微信小游戏激励广告

    前言 鉴于目前的cocos3.6.0的教程较少,开发小游戏踩了不少坑.想写个帖子总结记录下 1.要求 目前微信小游戏开通流量主的条件,是UV达到1000以上,也就是说要有至少1000个人访问过你的小游 ...

  2. unity google admob ios 接入 聚合激励广告适配器

    下面说下躺坑 主要是接入google admob 聚合激励广告适配器 ,开启facebook ,unity,admob 广告 使用sdk框架接入 sdk下载地址:https://developers. ...

  3. 应用内接入激励广告全步骤教程,助力流量高效变现

    什么是激励广告 激励广告是一种全屏幕的视频广告,用户可以选择点击观看,以换取相应奖励.常见的应用场景有,游戏中玩家因操作失误导致"死亡",为了获得复活机会,玩家选择观看弹出的激励广 ...

  4. 今日头条安卓_今日头条加入“常用”小程序窗口,小游戏或将再次崛起?

    安卓手机在今日头条7.1.8版本更新后,头条APP底部出现了[常用]标签,而点击后则会弹出小程序桌面.此前在今日头条上使用过的小程序会出现在此处.最好的位置+战略级的布局,已经很明确告诉我们,需要在今 ...

  5. 今日头条 ocpc java_今日头条OCPC应该怎么玩?转化才定蹭蹭蹭

    越来越多广告主的加入,普通的CPC和CPM已不能满足需求,于是今日头条OCPC应运而生. 说到OCPC,玩过头条的,应该都不陌生,OCPC投放,简单地说,他可以严格控制我们的转化成本. 但与其他行业有 ...

  6. python今日头条新闻爬虫_头条爬虫最新资讯

    头条搜索的爬虫UA为"Bytespider"首写字母为大写.头条搜索的ip字段总共涉及 6 个 日前河南一家一家名为今日油条的网红店装修.logo与今日头条极其相似引起众金网友关注 ...

  7. 媒体AI配图的时代来临!巴比特今日起全面拥抱AIGC——头条图片,AI创作!

    图片来源:由无界版图AI工具生成 2022年,AI绘画的创造力正在改变与"视觉内容"有关的整个产业链,10年后往回看,今天可能是历史的节点. 今天(10月25日),巴比特正式对外宣 ...

  8. python 今日头条 微头条_今日头条微头条范文-头条号的微头条你们都发些什么,该如何写?...

    头条号的微头条你们都发些什么,该如何写? 心灵相约头条号.呼唤着,努力着,拼搏着,它属于努力地人们,是传播正能量的家园.今天起要根扎头条号,写出优秀地原创作品.头条号的朋友们努力吧!用心血和汗水浇灌头 ...

  9. python 头条_python-selenium登陆今日头条

    https://blog.csdn.net/a942242856/article/details/88379727 #python-selenium登陆今日头条 在运营今日头条的过程当中,有时候未免要 ...

  10. 视频MD5修改工具(短视频去重) 自媒体如何解决视频重复问题头条视频去重 今日头条视频消重去...

    视频去重方法批量处理去重消重去水印去logo软件 视频分析技术批量处理去重消重去水印去logo软件 youtubu 视频去重批量处理去重消重去水印去logo软件 utubu 视频去重批量处理去重消重去 ...

最新文章

  1. 与技术无关的书单--你可以笑着说有些是“精神鸦片”
  2. VS2017缺少头文件的解决办法
  3. jwt思维导图,让jwt不再难懂
  4. 自定义ORM系列(三)工具雏形及基本用法
  5. struts2框架入门
  6. 玩转mini2440开发板之【如何设置开发板的网络参数】
  7. Ubuntu apache 禁止目录浏览
  8. redis 缓存有效期
  9. 通过cmd命令行开启计算机xx服务
  10. ❤️Python Django网站开发 2021年最新版教程 合集❤️
  11. Otto开发初探——微服务依赖管理新利器
  12. 计算机毕业论文降重,湖南计算机专业毕业论文英文摘要,财务管理专业硕士毕业论文降重...
  13. ECharts - dataset组件的用法详解
  14. java Ofd 转图片_OFD文件怎么转换成图片格式
  15. 项目管理提升绩效考核的方法
  16. word打开文档很久很慢_打开office非常慢怎么回事_电脑打开word文件很慢怎么办
  17. Outlook中老是出来“信息检索” -- 解决方法
  18. 电影9 10大经典电影
  19. 教培企业女神节线上营销方案怎么做好?
  20. MLY -- 6.Your dev and test sets should come from the same distribution

热门文章

  1. css伪元素研究(::before/::after)
  2. 关于在for循环中绑定事件打印变量i是最后一次。
  3. 操作config文件
  4. 孙鑫VC学习笔记:第十二讲 (三) 用C++函数读写文件
  5. docker安装mysql5.7_docker安装mysql5.7
  6. 拓端tecdat|Tableau 数据可视化:探索性图形分析新生儿死亡率数据
  7. js基础知识汇总13
  8. Windows:定时/进程结束执行命令
  9. 计算机组成原理内存模块,计算机组成原理
  10. caffe中网络结构参数详解