AI变现助手接入文档


集成说明

<p>[TOC]</p> <h2>1.奇点简介</h2> <p>广告聚合SDK,一次集成,多平台广告联盟自动填充。</p> <h2>2.SDK集成说明</h2> <p>参见Demo地址:联系商务苏经理(电话:13911636831 微信:Darren162814 邮箱:sulei@qdjubian.com)获取Demo。</p> <h3>AndroidManifest.xml文件需配置以下信息</h3> <p><strong>权限声明:</strong></p> <pre><code class="language-xml">&lt;!-- 必要权限 --&gt; &lt;uses-permission android:name="android.permission.INTERNET" /&gt; &lt;uses-permission android:name="android.permission.READ_PHONE_STATE" /&gt; &lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&gt; &lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt; &lt;uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&gt; &lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /&gt; &lt;uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /&gt; &lt;uses-permission android:name="android.permission.GET_TASKS" /&gt; &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt; &lt;uses-permission android:name="android.permission.WAKE_LOCK" /&gt;</code></pre> <p><strong>穿山甲配置:</strong></p> <pre><code class="language-xml"> &lt;!-- 穿山甲 --&gt; &lt;provider android:name="com.bytedance.sdk.openadsdk.TTFileProvider" android:authorities="${applicationId}.TTFileProvider" android:exported="false" android:grantUriPermissions="true"&gt; &lt;meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/file_paths" /&gt; &lt;/provider&gt; &lt;provider android:name="com.bytedance.sdk.openadsdk.multipro.TTMultiProvider" android:authorities="${applicationId}.TTMultiProvider" android:exported="false" /&gt;</code></pre> <p><strong>广点通配置:</strong></p> <pre><code class="language-xml">&lt;!-- gdt --&gt; &lt;provider android:name="android.support.v4.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true"&gt; &lt;meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/gdt_file_path" /&gt; &lt;/provider&gt; &lt;!-- 声明SDK所需要的组件 --&gt; &lt;service android:name="com.qq.e.comm.DownloadService" android:exported="false" /&gt; &lt;!-- 请开发者注意字母的大小写,ADActivity,而不是AdActivity --&gt; &lt;activity android:name="com.qq.e.ads.ADActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize" /&gt; &lt;activity android:name="com.qq.e.ads.PortraitADActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:screenOrientation="portrait" /&gt; &lt;activity android:name="com.qq.e.ads.LandscapeADActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenSize" android:screenOrientation="landscape" /&gt;</code></pre> <p><strong>百度联盟配置:</strong></p> <pre><code class="language-xml">&lt;activity android:name="com.baidu.mobads.AppActivity" android:configChanges="screenSize|keyboard|keyboardHidden|orientation" android:theme="@android:style/Theme.Translucent.NoTitleBar" /&gt; &lt;provider android:name="com.baidu.mobads.openad.BdFileProvider" android:authorities="${packageName}.bd.provider" android:exported="false" android:grantUriPermissions="true"&gt; &lt;meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/bd_file_path" /&gt; &lt;/provider&gt;</code></pre> <p><strong>SDK导入</strong> 将Demo libs目录下的所有SDK导入工程项目的libs目录下,并在build.gradle中声明</p> <pre><code class="language-xml"> implementation files('libs/fusion-adapter-v&lt;最新版&gt;.aar') implementation files('libs/fusion-sdk-baidu-v&lt;最新版&gt;.aar') implementation files('libs/fusion-core-v&lt;最新版&gt;.aar') implementation files('libs/fusion-sdk-gdt-v&lt;最新版&gt;.aar') implementation files('libs/fusion-sdk-openad-v&lt;最新版&gt;.aar') implementation files('libs/fusion-sdk-kuaishou-v&lt;最新版&gt;.aar') implementation files('libs/fusion-ad-util-v&lt;最新版&gt;.aar') implementation files('libs/common-v&lt;最新版&gt;.aar') implementation files('libs/open_ad_sdk.aar') implementation files('libs/GDTSDK.unionNoPlugin&lt;版本号&gt;.aar') implementation files('libs/Baidu_MobAds_SDK-release.aar') implementation files('libs/ks_adsdk-ad-&lt;版本号&gt;-publishRelease.aar')</code></pre> <h2>3.SDK初始化说明</h2> <p>在Application中调用以下初始化方法:</p> <pre><code class="language-java"> // 联盟SDK相关配置 AiAdConfig aiAdConfig = new AiAdConfig.Builder() .setOpenAdAppId("5101295") //设置穿山甲AppId .setGdtAppId("1110911996") //设置广点通AppId .setBaiduAppId("cf690f12") //设置百度联盟AppId .setKsAppId("90009")//设置快手联盟AppId .setCacheAdPositionInfo(true) // 当AI变现助手服务暂不可用时是否使用之前的缓存排序数据,默认false .setUseTextureView(false) // 是否使用TextureView控件播放视频,默认为SurfaceView true: 使用TextureView; false: 使用SurfaceView,默认为false .build(); // 初始化SDK FusionAi.getInstance(this, "&lt;Dashboard分配的AppKey&gt;", aiAdConfig); // 是否打印日志 FusionAi.getInstance().setDebug();</code></pre> <h2>4.激励视频广告</h2> <p><strong>初始化广告位</strong></p> <pre><code class="language-java">AiRewardVideoAd aiRewardVideoAd = new AiRewardVideoAd(this, "100016");</code></pre> <p><strong>设置广告监听</strong></p> <pre><code class="language-java">aiRewardVideoAd.setOnAiRewardVideoListener(new AiRewardVideoListener() { @Override public void onLoad(AiAdInfo aiAdInfo) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(AdRewardVideoActivity.this.getApplicationContext(), "有广告可展示", Toast.LENGTH_SHORT).show(); } }); } @Override public void onCached(AiAdInfo aiAdInfo) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(AdRewardVideoActivity.this.getApplicationContext(), "视频资源已缓存", Toast.LENGTH_SHORT).show(); } }); } @Override public void onFail(CommonError error) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(AdRewardVideoActivity.this.getApplicationContext(), "无广告展示", Toast.LENGTH_SHORT).show(); } }); } @Override public void onShow(AiAdInfo aiAdInfo) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(AdRewardVideoActivity.this.getApplicationContext(), "广告展示", Toast.LENGTH_SHORT).show(); } }); } @Override public void onClick(AiAdInfo aiAdInfo) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(AdRewardVideoActivity.this.getApplicationContext(), "广告点击", Toast.LENGTH_SHORT).show(); } }); } @Override public void onVideoComplete(AiAdInfo aiAdInfo) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(AdRewardVideoActivity.this.getApplicationContext(), "视频播放完成", Toast.LENGTH_SHORT).show(); } }); } @Override public void onVideoError(AiAdInfo aiAdInfo) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(AdRewardVideoActivity.this.getApplicationContext(), "视频播放错误", Toast.LENGTH_SHORT).show(); } }); } @Override public void onRewardVerify(AiAdInfo aiAdInfo, boolean rewardVerify) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(AdRewardVideoActivity.this.getApplicationContext(), "激励视频激励回调", Toast.LENGTH_SHORT).show(); } }); } @Override public void onSkippedVideo(AiAdInfo aiAdInfo, float progress) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(AdRewardVideoActivity.this.getApplicationContext(), "视频被用户跳过", Toast.LENGTH_SHORT).show(); } }); } @Override public void onClose(AiAdInfo aiAdInfo) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(AdRewardVideoActivity.this.getApplicationContext(), "视频广告关闭", Toast.LENGTH_SHORT).show(); } }); } });</code></pre> <p><strong>加载广告</strong> 初始化广告位后调用load方法开始加载广告</p> <pre><code class="language-java">aiRewardVideoAd.load();</code></pre> <p><strong>展示广告</strong> 在有可展示的广告回调后,调用show方法来展示广告</p> <pre><code class="language-java">aiRewardVideoAd.show();</code></pre> <p><strong>释放广告</strong> 在退出页面后,调用destroy方法来释放联盟广告资源</p> <pre><code class="language-java">aiRewardVideoAd.destroy();</code></pre> <h2>5.原生广告</h2> <p><strong>初始化广告位</strong></p> <pre><code class="language-java"> AiExpressAdConfig.Builder aiExpressAdConfigBuilder = new AiExpressAdConfig.Builder(); aiExpressAdConfigBuilder.setAdCount(2).setAdWidth(1080).setAdHeight(0); AiNativeExpressAd aiNativeExpressAd = new AiNativeExpressAd(this, "123", aiExpressAdConfigBuilder.build());</code></pre> <p><strong>设置广告监听</strong></p> <pre><code class="language-java">aiNativeExpressAd.setOnAiNativeListener(aiNativeListener); private AiNativeListener aiNativeListener = new AiNativeListener() { @Override public void onLoad(AiAdInfo aiAdInfo, List&lt;AiNativeExpress&gt; aiNativeExpressList) { if (mListView != null) { mListView.setLoadingFinish(); } if (aiNativeExpressList == null || aiNativeExpressList.isEmpty()) { Toast.makeText(NativeExpressActivity.this, "on FeedAdLoaded: ad is null!", Toast.LENGTH_SHORT).show(); return; } for (int i = 0; i &lt; LIST_ITEM_COUNT; i++) { mData.add(null); } bindAdListener(aiNativeExpressList); } @Override public void onFail(CommonError aiAdError) { if (mListView != null) { mListView.setLoadingFinish(); } Toast.makeText(NativeExpressActivity.this, "无广告", Toast.LENGTH_SHORT).show(); } @Override public void onClose(AiAdInfo aiAdInfo) { } };</code></pre> <p><strong>设置广告监听</strong></p> <pre><code class="language-java">adTmp.setExpressAdInteractionListener(new AiNativeExpress.ExpressAdInteractionListener() { @Override public void onAdClicked(AiAdInfo aiAdInfo) { Toast.makeText(NativeExpressActivity.this, "广告被点击", Toast.LENGTH_SHORT).show(); } @Override public void onAdShow(AiAdInfo aiAdInfo) { Toast.makeText(NativeExpressActivity.this, "广告展示", Toast.LENGTH_SHORT).show(); } @Override public void onRenderFail(AiAdError aiAdError) { Toast.makeText(NativeExpressActivity.this, aiAdError.toString(), Toast.LENGTH_SHORT).show(); } @Override public void onRenderSuccess(AiAdInfo aiAdInfo) { //返回view的宽高 单位 dp Toast.makeText(NativeExpressActivity.this, "渲染成功", Toast.LENGTH_SHORT).show(); myAdapter.notifyDataSetChanged(); } });</code></pre> <p><strong>加载广告</strong> 初始化广告位后调用load方法开始加载广告</p> <pre><code class="language-java">aiNativeExpressAd.load();</code></pre> <p><strong>释放广告</strong> 在退出页面后,调用destroy方法来释放联盟广告资源</p> <pre><code class="language-java">aiNativeExpressAd.destroy();</code></pre> <h2>6.插屏广告</h2> <p><strong>初始化广告位</strong></p> <pre><code class="language-java">AiInterstitial aiInterstitial = new AiInterstitial(this, "100013");</code></pre> <p><strong>设置广告监听</strong></p> <pre><code class="language-java">aiInterstitial.setOnAiInteractionListener(new AiInteractionListener() { @Override public void onLoad(AiAdInfo aiAdInfo) { Toast.makeText(InterstitialActivity.this, "有广告可展示", Toast.LENGTH_SHORT).show(); } @Override public void onFail(CommonError error) { Toast.makeText(InterstitialActivity.this, "无广告展示", Toast.LENGTH_SHORT).show(); } @Override public void onReady() { Toast.makeText(InterstitialActivity.this, "渲染成功,可以展示", Toast.LENGTH_SHORT).show(); } @Override public void onShow(AiAdInfo aiAdInfo) { Toast.makeText(InterstitialActivity.this, "广告展示", Toast.LENGTH_SHORT).show(); } @Override public void onClick(AiAdInfo aiAdInfo) { Toast.makeText(InterstitialActivity.this, "广告点击", Toast.LENGTH_SHORT).show(); } @Override public void onClose(AiAdInfo aiAdInfo) { Toast.makeText(InterstitialActivity.this, "广告关闭", Toast.LENGTH_SHORT).show(); } });</code></pre> <p><strong>加载广告</strong> 初始化广告位后调用load方法开始加载广告</p> <pre><code class="language-java">aiInterstitial.load();</code></pre> <p><strong>释放广告</strong> 在退出页面后,调用destroy方法来释放联盟广告资源</p> <pre><code class="language-java">aiInterstitial.destroy();</code></pre> <h2>7.开屏广告</h2> <p><strong>初始化广告位</strong></p> <pre><code class="language-java">AiSplashView aiSplashView = new AiSplashView(this, "100014"); splashContainer.addView(aiSplashView, new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));</code></pre> <p><strong>设置广告监听</strong></p> <pre><code class="language-java">aiSplashView.setOnAiSplashListener(new AiSplashListener() { @Override public void onLoad(AiAdInfo aiAdInfo) { Toast.makeText(AdSplashActivity.this, "有广告可展示", Toast.LENGTH_SHORT).show(); } @Override public void onFail(CommonError error) { Toast.makeText(AdSplashActivity.this, "无广告展示", Toast.LENGTH_SHORT).show(); } @Override public void onReady() { Toast.makeText(AdSplashActivity.this, "渲染成功,可以展示", Toast.LENGTH_SHORT).show(); } @Override public void onShow(AiAdInfo aiAdInfo) { Toast.makeText(AdSplashActivity.this, "广告展示", Toast.LENGTH_SHORT).show(); } @Override public void onClick(AiAdInfo aiAdInfo) { Toast.makeText(AdSplashActivity.this, "广告点击", Toast.LENGTH_SHORT).show(); } @Override public void onSkip(AiAdInfo aiAdInfo) { Toast.makeText(AdSplashActivity.this, "广告跳过", Toast.LENGTH_SHORT).show(); } @Override public void onTimeOver(AiAdInfo aiAdInfo) { Toast.makeText(AdSplashActivity.this, "广告倒计时结束", Toast.LENGTH_SHORT).show(); } @Override public void onClose(AiAdInfo aiAdInfo) { Toast.makeText(AdSplashActivity.this, "广告关闭", Toast.LENGTH_SHORT).show(); } });</code></pre> <p><strong>加载广告</strong> 初始化广告位后调用load方法开始加载广告</p> <pre><code class="language-java">aiSplashView.load();</code></pre> <p><strong>释放广告</strong> 在退出页面后,调用destroy方法来释放联盟广告资源</p> <pre><code class="language-java">aiSplashView.destroy();</code></pre> <h2>8.Banner广告</h2> <p><strong>初始化广告位</strong></p> <pre><code class="language-java">AiBannerView aiBannerView = new AiBannerView(this, "100013"); bannerContainer.addView(aiBannerView, new FrameLayout.LayoutParams(1080, ViewGroup.LayoutParams.WRAP_CONTENT));</code></pre> <p><strong>设置广告监听</strong></p> <pre><code class="language-java">aiBannerView.setOnAiBannerListener(new AiBannerListener() { @Override public void onLoad(AiAdInfo aiAdInfo) { Toast.makeText(AdBannerActivity.this, "有广告可展示", Toast.LENGTH_SHORT).show(); } @Override public void onFail(CommonError error) { Toast.makeText(AdBannerActivity.this, "无广告展示", Toast.LENGTH_SHORT).show(); } @Override public void onReady() { Toast.makeText(AdBannerActivity.this, "渲染成功,可以展示", Toast.LENGTH_SHORT).show(); } @Override public void onShow(AiAdInfo aiAdInfo) { Toast.makeText(AdBannerActivity.this, "广告展示", Toast.LENGTH_SHORT).show(); } @Override public void onClick(AiAdInfo aiAdInfo) { Toast.makeText(AdBannerActivity.this, "广告点击", Toast.LENGTH_SHORT).show(); } @Override public void onClose(AiAdInfo aiAdInfo) { } });</code></pre> <p><strong>加载广告</strong> 初始化广告位后调用load方法开始加载广告</p> <pre><code class="language-java">aiBannerView.load();</code></pre> <p><strong>释放广告</strong> 在退出页面后,调用destroy方法来释放联盟广告资源</p> <pre><code class="language-java">aiBannerView.destroy();</code></pre> <h2>9.AiAdInfo回调信息说明</h2> <table> <thead> <tr> <th>方法</th> <th>类型</th> <th>说明</th> </tr> </thead> <tbody> <tr> <td>getNetworkFirmId()</td> <td>int</td> <td>获取 广告平台对应的ID,用于区分广告平台,参考文档末尾的 Network Firm Id Table</td> </tr> <tr> <td>getAdsourceId()</td> <td>String</td> <td>获取 广告源ID. 可在开发者后台或TopOn Open API 通过广告源ID查询具体的Network信息</td> </tr> <tr> <td>getAdsourceIndex()</td> <td>int</td> <td>获取 当前广告源在WaterFall中的排序(从0开始,0优先级最高)</td> </tr> <tr> <td>getEcpm()</td> <td>dounble</td> <td>获取 eCPM,currency获取, 精度可通过 precision 获取</td> </tr> <tr> <td>isHeaderBiddingAdsource()</td> <td>int</td> <td>是否为头部竞价的广告源,1:是,2:否</td> </tr> <tr> <td>getShowId()</td> <td>int</td> <td>获取 每次展示广告时生成的独立ID</td> </tr> <tr> <td>getPublisherRevenue()</td> <td>double</td> <td>获取 展示收益,单位可通过currency获取, 精度可通过 precision 获取</td> </tr> <tr> <td>getCurrency()</td> <td>String</td> <td>获取 货币单位,例如:&quot;USD&quot;</td> </tr> <tr> <td>getCountry()</td> <td>String</td> <td>获取 国家代码, 例如:”CN&quot;</td> </tr> <tr> <td>getQiDianPlacementId()</td> <td>String</td> <td>获取 奇点广告位ID</td> </tr> <tr> <td>getQiDianAdFormat()</td> <td>String</td> <td>获取 广告类型,包括:&quot;Native&quot;、&quot;RewardedVideo&quot;、&quot;Banner&quot;、&quot;Interstitial&quot;、&quot;Splash&quot;</td> </tr> <tr> <td>getEcpmPrecision()</td> <td>String</td> <td>获取 ECPM精度 <br>&quot;publisher_defined&quot;:开发者在奇点后台为广告源定义的eCPM(交互推广的eCPM也属于该类型);<br>&quot;estimated&quot;: 奇点的预估eCPM(auto eCPM)(暂不支持);<br>&quot;exact&quot;:Header Bidding实时竞价的eCPM(暂不支持)</td> </tr> <tr> <td>getAdNetworkType()</td> <td>String</td> <td>获取 Network类型<br>&quot;Network&quot;:第三方广告平台<br>&quot;Cross_Promotion&quot;:交互推广<br>&quot;Adx&quot;:暂未支持</td> </tr> <tr> <td>getNetworkPlacementId()</td> <td>String</td> <td>获取 Network的广告位ID</td> </tr> <tr> <td>getEcpmLevel()</td> <td>int</td> <td>获取 广告源的eCPM层级,头部竞价广告源默认为0</td> </tr> <tr> <td>getSegmentId()</td> <td>int</td> <td>获取 流量分组ID</td> </tr> <tr> <td>getScenarioId()</td> <td>String</td> <td>获取 广告场景ID,仅Rewarded Video&amp;Interstitial支持</td> </tr> <tr> <td>getScenarioRewardName()</td> <td>String</td> <td>获取 广告场景的激励名称,仅Rewarded Video支持</td> </tr> <tr> <td>getScenarioRewardNumber()</td> <td>int</td> <td>获取 广告场景的激励数量,仅Rewarded Video支持</td> </tr> <tr> <td>getSubChannel()</td> <td>String</td> <td>获取子渠道信息(暂不支持)</td> </tr> <tr> <td>getChannel()</td> <td>String</td> <td>获取 渠道信息(暂不支持)</td> </tr> <tr> <td>getCustomRule()</td> <td>String</td> <td>获取 Placement+App维度的自定义规则的Json字符串</td> </tr> </tbody> </table>

页面列表

ITEM_HTML