如何在React Native中实现AdMob的原生广告?我发现的最好的是react-native-admob,但它只能修复横幅和全屏插页式广告.如何在我的React Native应用中使用AdMob或任何其他原生广告提供商实施原生广告?
我想知道如何在每次随机位置的webview内容中显示原生广告.假设我在webview中加载静态html页面.当用户阅读页面原生广告的内容出现在内容中时,是否可以在随机位置显示本地内部webview html页面.
我正在创建一个NativeAdsManager在a中使用的应用程序RecyclerView.当我加载广告时,我发现内存不足异常.这是我初始化的地方NativeAdsManager:
NativeAdsManager manager = new NativeAdsManager(MainActivity.this,PLACEMENT_ID,5);
manager.setListener(MainActivity.this);
manager.loadAds(NativeAd.MediaCacheFlag.ALL);
Run Code Online (Sandbox Code Playgroud)
当我收到错误时,这是我的日志:
07-07 16:44:37.513 14833-15332/com.example.fbads E/dalvikvm-heap: Out of memory on a 1324560-byte allocation.
07-07 16:44:37.528 14833-15332/com.example.fbads E/k: Error downloading image: https://external.xx.fbcdn.net/safe_image.php?d=AQAUgFkrAP5pYhO4&w=796&h=416&url=http%3A%2F%2Fwww.facebook.com%2Fads%2Fimage%2F%3Fd%3DAQJm1ZveY2ilC4oqvu3Hf63USTwVITC5XBV-qrlWjCWeNgKXrAn5SBB9J6cFyDL0sqpnMWqMDehXuXprwbAKycgE-kskX1q8_jpYlyB4sfhCxSRpHM_5n9ZA8-xhlcZ-VxlRs9DT4i5qeLy6kEZxOSQG&cfs=1&ext=jpg
java.lang.OutOfMemoryError
at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:620)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:596)
at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:376)
at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:402)
at com.facebook.ads.internal.util.m.a(Unknown Source)
at com.facebook.ads.internal.util.k.b(Unknown Source)
at com.facebook.ads.internal.util.k.doInBackground(Unknown Source)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Run Code Online (Sandbox Code Playgroud)
出现这种情况的原因是什么?有关如何解决此问题的任何建议?
我今天收到了来自AdMob的电子邮件说:
更改为原生广告政策:原生广告需要MediaView才能呈现视频或主要图片资源.为了帮助您更轻松地提供更好的广告体验,从10月29日开始,原生广告将要求MediaView呈现视频或主要图片资源.不符合此日期的广告单元将停止投放广告,这可能会影响您的广告收入.
我在我的Android应用程序中尝试了这一点,删除了单独的图像处理ImageView和视频MediaView,但我发现MediaView没有根据显示的图像高度调整视图的高度.
在Google的这个代码示例示例中,使用了固定的高度和宽度MediaView.我无法做到这一点,因为此屏幕响应屏幕大小,这将根据设备而变化.可以动态调整图像大小的事实是使用UnifiedNativeAds而不是使用横幅等预定义广告的主要好处之一.
这就是我需要显示的方法MediaView,match_parent用于宽度和wrap_content高度.
<com.google.android.gms.ads.formats.MediaView
android:id="@+id/ad_media"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:adjustViewBounds="true"
android:scaleType="fitXY"/>
Run Code Online (Sandbox Code Playgroud)
这就是我所需要的,并期望它看起来像使用 wrap_content
在之前的情况下,我们可以使用ImageView单独渲染图像,该wrap_content值正确地调整了图像的大小.
有人有解决方法吗?如何在没有硬编码MediaView高度的情况下遵循新的Google要求?
我完整的代码可以发现在这里,在GitHub上我的演示应用程序.
我已经按照原生广告中的说明实施了Google原生广告
除Android 4.x版本外,它在所有设备上均可完美运行。崩溃日志控制台是
Non-fatal Exception: java.lang.IllegalArgumentException: Optimized data directory /storage/emulated/0/Android/data/com.myapp/cache is not owned by the current user. Shared storage cannot protect your application from code injection attacks.
at dalvik.system.DexFile.(DexFile.java:100)
at dalvik.system.DexFile.loadDex + 149(DexFile.java:149)
at dalvik.system.DexPathList.loadDexFile + 251(DexPathList.java:251)
at dalvik.system.DexPathList.makeDexElements + 219(DexPathList.java:219)
at dalvik.system.DexPathList.(DexPathList.java:96)
at dalvik.system.BaseDexClassLoader.(BaseDexClassLoader.java:56)
at dalvik.system.DexClassLoader.(DexClassLoader.java:57)
at ir.b + 31(ir.java:31)
at ir.a + 5(ir.java:5)
at iu.a + 1(iu.java:1)
at com.google.android.gms.ads.internal.ag.run + 5(ag.java:5)
at java.util.concurrent.ThreadPoolExecutor.runWorker + 1080(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run + 573(ThreadPoolExecutor.java:573)
at java.lang.Thread.run + 856(Thread.java:856)
Run Code Online (Sandbox Code Playgroud)
在崩溃上方,它显示为优化数据目录 /storage/emulated/0/Android/data/com.myapp/cache不属于当前用户。共享存储无法保护您的应用程序免受代码注入攻击 …
我有一个壁纸应用程序,它在主屏幕中显示来自 Firestore 的图片,我正在使用flutter_native_admob包来显示本机,并且广告工作正常。
我已经尝试过使用staggered_grid_view包,但它没有用,每次我将 StaggeredGridTile 中的值从 1 更改为 2 以显示原生广告而不是网格时,包都会中断,即使我设置了一个数字以在 x 张图片后显示广告,它显示在错误的地方滚动。
我需要什么:
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final nativeAdmob = NativeAdmob();
int counter = 0;
double result;
int num = 4;
@override
Widget build(BuildContext context) {
Widget _buildGrid(int index){
return Container(
color: Colors.green,
child: Center(
child: Text("$index"),
),
);
/*
// I need to show this widget between the content
NativeAdmobBannerView(
adUnitID: "ca-app-pub-3940256099942544/2247696110", // …Run Code Online (Sandbox Code Playgroud) 我正在尝试以编程方式从Admob设置原生广告,但此处提供的官方指南几乎没有相关文档.我认为我接近解决方案,但我没有看到如何设置它的单位大小.
文件说:
在以编程方式为NativeExpressAdView创建AdSize时,发布者还可以使用FULL_WIDTH常量.
问题是这个FULL_WIDTH单元AdSize不像其他可用的单元,它只返回一个整数.
这是我现在得到的:
mAdmobNativeExpressAdview = new NativeExpressAdView(this);
mAdmobNativeExpressAdview.setAdUnitId(getString(R.string.mediation_native_id));
mAdmobNativeExpressAdview.setAdSize(AdSize.FULL_WIDTH);
Run Code Online (Sandbox Code Playgroud)
但是最后一行无法实现,因为setAdSize期待一个AdSize对象.
还有另一种设置此属性的方法吗?
我有一个奇怪的"问题",或者可能是一个"功能",我只是不知道,只要在我的RecyclerView中加载NativeAdExpress,如果只有部分NativeAd可见,它会强制RecyclerView滚动直到原生广告变得完全可见,这种行为导致列表在我滚动时继续跳跃.
我的布局主要是:
具有Tabs和ViewPager的Activity> AppBar> Pager中的每个页面都包含PullToRefresh,里面有一个RecyclerView,RecyclerView有两种类型的项目(Article和NativeAdExpress).
更新:我猜测为什么会发生这种情况主要是因为原生广告在webview中表达渲染,并且这个webview获得焦点然后这会导致RecyclerView滚动到它,但这只是一个猜测
更新2:显然这是支持库中的一个问题.24.0.0,这太过于up2date的成本:(
Heres是我的完整XML /布局
<?xml version="1.0" encoding="utf-8"?>
<my.package.custom.views.CustomDrawerLayout
android:id="@+id/drawer_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:openDrawer="end">
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
style="@style/AlertDialog.AppCompat.Light"
fontPath="fonts/fonts/DroidKufi-Regular.ttf"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="end"
android:fitsSystemWindows="true"
app:elevation="5px"
app:headerLayout="@layout/nav_header"
app:itemIconTint="@color/colorPrimary"
app:itemTextColor="@color/contentColor"
app:actionLayout="@layout/nav_item_layout"
app:menu="@menu/drawer_menu"
app:theme="@style/NavDrawerStyle"
tools:openDrawer="end"
/>
</my.package.custom.views.CustomDrawerLayout>
Run Code Online (Sandbox Code Playgroud)
其中"app_bar_main.xml"如下:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context=".ui.activities.ArticlesListActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="end">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="52dp"
android:background="?attr/colorPrimary"
android:gravity="end"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingEnd="14dp"
android:paddingStart="14dp">
<android.support.v7.widget.AppCompatImageButton
android:id="@+id/ivCustomDrawable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true" …Run Code Online (Sandbox Code Playgroud) 我一直在寻找有关如何在撰写时显示原生广告的示例应用程序,但我找不到。有什么解决办法吗?
我想了解 admob 原生广告政策。
他们在政策中说
确保空白(或背景图像)不可点击。
- 只有广告标题、URL、CTA 和非背景图像资源应该是可点击的。
- 检查您不打算放置的文本周围是否有额外的空白。
- 用于显示原生广告资源的 TextView 与其他资源相同,因此您可以使用正常的布局技术来格式化它们。
例如,您可以使用wrap_content属性值来确保您的TextView不会扩展超出显示文本所需的大小。
https://support.google.com/admob/answer/6240814?hl=zh-CN&ref_topic=7384666
我想确定哪些元素是可点击的?哪些元素不可点击?
我的想法是什么?我认为...
1:不可点击
2:可点击
3:可点击
4:可点击
5:可点击
6:不可点击-现实:这里有问题!Admob 未通过其政策中的评级,但可在其自定义 .xib 文件中单击。
只有广告标题、URL、CTA 和非背景图像资源应该是可点击的。
7:不可点击-现实:这里有问题!Admob 不会在其策略中传递正文,但可以在其自定义 .xib 文件中单击正文。
只有广告标题、URL、CTA 和非背景图像资源应该是可点击的。
8:可点击
你怎么认为?我对吗?根据 Admob 政策,评级或正文是否可点击?
请按照以下格式回答我的问题:
1: CLICKABLE or NOT CLICKABLE
2: CLICKABLE or NOT CLICKABLE
3: CLICKABLE or NOT CLICKABLE
4: CLICKABLE or NOT CLICKABLE
5: CLICKABLE or NOT CLICKABLE
6: CLICKABLE or NOT CLICKABLE
7: CLICKABLE or …Run Code Online (Sandbox Code Playgroud) native-ads ×10
admob ×9
android ×7
flutter ×2
dart ×1
facebook ×1
google-dfp ×1
gridview ×1
ios ×1
mediaview ×1
react-native ×1