首页 > 解决方案 > Facebook 广告不适用于 expo sdk 33

问题描述

我已将我的 Expo sdk 升级到最新版本 (33.0.0)。我已经改变了我需要的一切(我改变了 fb 广告的导入,如下所示:

import * as FacebookAds from 'expo-ads-facebook';并下载它)。

当我 2 天前运行这个应用程序时(我在 sdk 32 上)一切都很好,但是现在......我读到了我需要更改的所有内容,所以fb ads工作只是导入和下载。当我运行我的应用程序时,fb 广告不显示,它在控制台中给出了这个错误:

error SyntheticEvent {
  "_dispatchInstances": FiberNode {
    "tag": 5,
    "key": null,
    "type": "ViewManagerAdapter_CTKBannerView",
  },
  "_dispatchListeners": [Function onError],
  "_targetInst": FiberNode {
    "tag": 5,
    "key": null,
    "type": "ViewManagerAdapter_CTKBannerView",
  },
  "bubbles": undefined,
  "cancelable": undefined,
  "currentTarget": 1255,
  "defaultPrevented": undefined,
  "dispatchConfig": Object {
    "registrationName": "onAdError",
  },
  "eventPhase": undefined,
  "isDefaultPrevented": [Function functionThatReturnsFalse],
  "isPropagationStopped": [Function functionThatReturnsFalse],
  "isTrusted": undefined,
  "nativeEvent": Object {
    "errorCode": 1002,
    "errorMessage": "Ad was re-loaded too frequently",
  },
  "target": undefined,
  "timeStamp": 1562671873682,
  "type": undefined,
}

我究竟做错了什么?代码:

// page.js
import React from 'react';

import { View } from 'react-native';
import { createStackNavigator, createAppContainer } from 'react-navigation'; // Version can be specified in package.json
import * as FacebookAds from 'expo-ads-facebook';

import AdScreenFacebook from './AdScreenFacebook'

const adsManager = new FacebookAds.NativeAdsManager("2272791379702600_2272795453035526", 10);

class AdScreen extends React.Component {
  render () {
          return (
  <View>
  <AdScreenFacebook adsManager={adsManager} />

  <FacebookAds.BannerAd
      placementId="2272791379702600_2272803043034767"
      type="standard"
      onPress={() => console.log('click')}
      onError={error => console.log('error', error)}
    />
    </View>
          );
      }

 }


  export default createStackNavigator(
    {
      Main: {
        screen: AdScreen,
      },
      AdScreenFacebook: {
        screen: AdScreenFacebook,
      }
    },
    {
      initialRouteName: 'Main',
    }
  );
  
  // AdScreenFacebook.js
  
  import React from 'react';

import { StyleSheet, Text, View, Dimensions } from 'react-native';

import * as FacebookAds from 'expo-ads-facebook';
const { AdTriggerView, AdMediaView, AdIconView } = FacebookAds;


class AdScreenFacebook extends React.Component {
  render () {
          return (
            <View style={{  flexDirection: 'column',
    justifyContent: 'center',
    alignItems: 'center',}}>
            <View style={{ width:500}}>
                   <AdMediaView style={{ width: 160, height: 90 }}/>
                   <View style={{flexDirection: 'row'}}>
                   <AdIconView style={{ width: 50, height: 50 }}/>
                   <AdTriggerView>
                     <Text>{this.props.nativeAd.bodyText}</Text>
                       <Text>{this.props.nativeAd.callToActionText}</Text>
                   </AdTriggerView>
                 </View>
                  </View>
                    </View>
    );
      }

 }


export default FacebookAds.withNativeAd(AdScreenFacebook);

标签: react-nativeexpofacebook-ads-api

解决方案


升级 FB SDK 现在是一个悬而未决的问题

目前,已确认 Expo build 未在不分离的条件下实施,导致错误。

如果你现在想使用它,你运行expo eject (使用 Expokit)


推荐阅读