关键词:
HMS Core广告服务(Ads Kit)为开发者提供流量变现服务和广告标识服务,依托华为终端能力,整合资源,帮助开发者获取高质量的广告内容。同时提供转化跟踪参数服务,支持三方监测平台、广告主进行转化归因分析。下面我们分享一些开发者在接入广告服务中经常会碰到的问题,希望给遇到类似问题的开发者提供参考。
1. 手机由竖屏转换成横屏时Banner广告尺寸变大怎么办?
解决方案:
固定BannerView的宽度或高度。例如下方的代码中固定了Banner广告的高度:
<com.huawei.hms.ads.banner.BannerView
android:id="@+id/hw_banner_view"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true" />
Banner广告正常显示效果如下:
2. 使用示例代码测试时,原生广告不显示“为什么显示此广告”图标“i”和“不再显示此广告”图标“x”(即广告关闭按钮)怎么办?
原因分析:
为了符合本地合规的高要求,SDK增加了“不再显示此广告”的能力,且默认显示“不再显示此广告”的图标“x”。此图标只有在非中国大陆区域发行的设备上才会显示,因此在中国大陆发行的设备上测试时,是看不到的。
参考建议:
如果App只在非中国大陆区域上线,是不影响使用的,可以使用非中国大陆区域发行的设备查看展示效果。
如果App只在中国大陆区域上线,需要用到关闭按钮时,建议在原生广告布局中自己实现。
如果App是全球上线,那么在自己实现关闭按钮的同时还需要注意,App在非中国大陆区域上线后,与默认展示的关闭按钮是否会冲突。
补充:
“不再显示该广告”的功能是在原生广告设置选项NativeAdConfiguration.Builder中设置的,其提供的setRequestCustomDislikeThisAd()
方法可以设置是否要自定义“不再显示该广告”的功能,默认为false。表现的形式如下:
如果设置为true,则会显示“为什么看到此广告”图标“i”,也就是下图所示:
当自己实现关闭按钮时,为了避免在非中国大陆区域上线的应用中出现两个关闭按钮,建议将其设置为true。
其次,可以通过调用NativeAdConfiguration.Builder().setChoicesPosition(int choicesPosition)
方法设置图标显示的位置。
广告选项的展示位置:
3. 如何一次请求多个原生广告?
原生广告提供了一次同时请求多个原生广告的方法loadAds()。
loadAds()请求有两个参数,除AdParam外,maxAdsNum是请求加载的最大广告数量,最大值为5。SDK返回的广告数量将会小于等于所请求的广告数量,并且返回的广告皆不相同。示例代码如下所示:
nativeAdLoader.loadAds(new AdParam.Builder().build(), 5);
当加载广告成功后,SDK会多次调用NativeAd.NativeAdLoadedListener监听器的onNativeAdLoaded()方法分别返回一个NativeAd对象,在广告都返回后再调用AdListener监听器的onAdLoaded方法回调通知此次请求成功;当加载广告失败后,SDK会调用AdListener监听器的onAdFailed()方法。
示例代码如下所示,其中testy63txaom86"为测试专用的广告位ID,App正式发布时需要改为正式的广告位ID。
NativeAdLoader.Builder builder = new NativeAdLoader.Builder(this, "testy63txaom86");
NativeAdLoader nativeAdLoader = builder.setNativeAdLoadedListener(new NativeAd.NativeAdLoadedListener()
@Override
public void onNativeAdLoaded(NativeAd nativeAd)
// 广告加载成功回调,多个广告对应多个回调
...
).setAdListener(new AdListener()
@Override
public void onAdLoaded()
// 广告全部返回后回调,说明所有广告返回成功
...
@Override
public void onAdFailed(int errorCode)
// 广告加载失败回调
...
).build();
nativeAdLoader.loadAds(new AdParam.Builder().build(), 5);
说明:再次使用NativeAdLoader加载广告前,请确保先前的请求已经完成。
4. 在应用内滚动播放贴片广告时,报错提示onMediaError : -1
在第一次播放贴片广告完成后,再次播放时返回了错误码-1.
原因分析:
当前网络不可用。
贴片广告在播放完成后,没有释放,导致下次播放时返回了-1。
解决方案:
- 检查网络。在targetSdkVersion 28及以上的手机上允许HTTP(S)网络请求,在“AndroidManifest.xml”做以下配置。
<application
...
android:usesCleartextTraffic="true"
>
...
</application>
- 在InstreamMediaStateListener中的onMediaCompletion()回调方法中释放贴片广告, 每次播放完成后,都需要释放掉。
public void onMediaCompletion(int playTime)
updateCountDown(playTime);
removeInstream();
playVideo();
private void removeInstream()
if (null != instreamView)
instreamView.onClose();
instreamView.destroy();
instreamContainer.removeView(instreamView);
instreamContainer.setVisibility(View.GONE);
instreamAds.clear();
5. 如何在国内测试非中国大陆区域的广告投放?
随着国内开发者在非中国大陆区域进行广告变现的需求越来越多,而开发者缺乏海外测试环境,导致在国内使用正式广告位ID测试时,出现请求不到广告的情况。
解决方法(应用上架需要超过12小时):
方法一:使用海外版本的华为手机,连接非中国大陆区域的VPN网络(非美国),将手机中的国家区域设置为非中国大陆且确保应用已在该区域上架,进行测试。
方法二:注册成为海外开发者,使用HMS ToolKit提供的Cloud Debugging功能,即远程真机进行测试。
方法三:借助“媒体服务平台”中的“广告测试服务”进行测试。详情请查看:变现测试
注意:华为广告在全球有四个投放站点:中国,亚非拉,欧洲,俄罗斯。不同的站点广告不支持跨区域请求获取广告【如需跨站点请求广告需使用对应国家的网络(可使用vpn代理),和对应国家的手机设备】。各个站点对应的国家详情可参考文档
了解更多详情>>
访问华为开发者联盟官网
获取开发指导文档
华为移动服务开源仓库地址:GitHub、Gitee
关注我们,第一时间了解 HMS Core 最新技术资讯~
faq接入hmscore推送服务,服务端下发消息常见错误码原因分析及解决方法
HMSCore推送服务支持开发者使用HTTPS协议接入Push服务端,可以从服务器发送下行消息给终端设备。这篇文章汇总了服务端下发消息最常见的6个错误码,并提供了原因分析和解决方法,有遇到类似问题的开发者们快了解一... 查看详情
faq接入hmscore推送服务,服务端下发消息常见错误码原因分析及解决方法(代码片段)
HMSCore推送服务支持开发者使用HTTPS协议接入Push服务端,可以从服务器发送下行消息给终端设备。这篇文章汇总了服务端下发消息最常见的6个错误码,并提供了原因分析和解决方法,有遇到类似问题的开发者们快了解... 查看详情
faq接入华为应用内支付服务常见问题解答
HMSCore应用内支付服务(In-AppPurchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程。开发者的应用集成IAPSDK后,调用IAPSDK接口,启动IAP收银台,即可实现应用内支付。通过应用内支付服务,... 查看详情
faq应用内支付服务无法拉起支付页面常见原因分析和解决方法
华为应用内支付服务(In-AppPurchases)通过简便的接入流程为用户提供良好的应用内支付体验,然而在实际接入过程中,有一些开发者反馈测试时会无法正常拉起支付页面,下文将详细分析问题出现的5种情形,并给出解决方案,... 查看详情
faq华为帐号服务报错907135701的常见原因总结和解决方法(代码片段)
很多开发者在接入华为帐号服务时,经常会出现907135701的报错。根据官网文档说明,错误码907135701表示:这个错误码在安卓和鸿蒙上都会出现,导致该报错的原因有很多,开发者可以按照下面几点进行排查。An... 查看详情
faq应用内支付服务无法拉起支付页面常见原因分析和解决方法
华为应用内支付服务(In-AppPurchases)通过简便的接入流程为用户提供良好的应用内支付体验,然而在实际接入过程中,有一些开发者反馈测试时会无法正常拉起支付页面,下文将详细分析问题出现的5种情形... 查看详情
faq应用集成hmscore部分服务出现“6003报错”情况的解决方法来啦
背景开发者在应用中集成HMSCore部分服务时,androidsdk以及flutter等跨平台sdk,会出现编译打包后,运行报6003错误码的情况。根据查询可以得知,错误代码6003表示证书指纹配置不一致,主要是生成的包(例如... 查看详情
faq申请运动健康服务验证环节常见问题及解答
华为HMSCore运动健康服务(HUAWEIHealthKit)提供原子化数据开放。应用在获取用户数据授权后,可通过接口访问运动健康数据,对用户数据进行读写等操作,为用户提供运动健康类数据服务。开发者应用在开发和测试阶段访问用户... 查看详情
faq调用应用内支付sdk时报错,如何用tag对问题进行排查和分析
...chases,IAP)为开发者提供便捷的应用内支付体验和简便的接入流程。开发者的应用集成IAPSDK后,调用IAPSDK接口,启动IAP收银台,即可实现应用内支付。在集成过程中,开发者可能会遇到报错的问题,这时我们可以通过查找日志中... 查看详情
faq调用应用内支付sdk时报错,如何用tag对问题进行排查和分析
...f0c;IAP)为开发者提供便捷的应用内支付体验和简便的接入流程。开发者的应用集成IAPSDK后,调用IAPSDK接口,启动IAP收银台,即可实现应用内支付。在集成过程中,开发者可能会遇到报错的问题,这时我们... 查看详情
如何使用postman调试hmscore推送接口?
HMSCore推送服务支持开发者使用HTTPS协议接入Push服务端。Postman是一款接口测试工具,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果。Postman可以模拟开发者服务器申请AccessToken... 查看详情
华为游戏小程序快应用账号登录6004报错集合(代码片段)
...AGC重新打开帐号服务和游戏服务的开关,并尝试清空HMSCore的数据。清空HMSCore数据方法:在调试手机中的“应用管理”中查找“HMSCore” 查看详情
18:ctk总结篇(faq)
...别对它们进行了详细的解答,希望对大家能有所帮助。FAQ常见问题能脱离Qt使用CTK吗?由于CTK的核心依赖于QtCore模块,所以要使用CTK,必须要有Qt的支持!如何使用CTKPluginFramework?CTKPluginFramework是作为CTK库来开发的,在编译完CTK... 查看详情
想问华为hms,core啥意思
HMSCore(华为移动服务)为华为终端用户提供华为帐号、支付等基础服务。您可以在任何安装了HMSCore(华为移动服务)的设备上登录华为帐号后,访问华为应用市场、云空间、运动健康等所有华为服务。HMSCore(华为移动服务)同... 查看详情
faq申请运动健康服务验证环节常见问题及解答
华为HMSCore运动健康服务(HUAWEIHealthKit)提供原子化数据开放。应用在获取用户数据授权后,可通过接口访问运动健康数据,对用户数据进行读写等操作,为用户提供运动健康类数据服务。开发者应用在开发和... 查看详情
faq申请运动健康服务验证环节常见问题及解答
华为HMSCore运动健康服务(HUAWEIHealthKit)提供原子化数据开放。应用在获取用户数据授权后,可通过接口访问运动健康数据,对用户数据进行读写等操作,为用户提供运动健康类数据服务。开发者应用在开发和... 查看详情
音频编辑服务uisdk接入指导及常见问题(代码片段)
华为HMSCore音频编辑服务(AudioEditorKit)是华为帮助全球开发者快速构建各类应用音频能力的服务,汇聚了华为在音乐、语音等相关音频领域的先进技术。音频编辑服务为开发者们提供音频基础编辑、AI配音、音源分离... 查看详情
faq集成分析服务的常见问题及解决方案(代码片段)
常见问题一:如何验证Analytics是否上报/接入成功?以及关键日志含义是什么?在初始化AnalyticsSDK前添加SDK日志开关如下:HiAnalyticsTools.enableLog();2.初始化SDK代码如下:HiAnalyticsInstanceinstance=HiAnalytics.getInstance(t... 查看详情