要するに: Android で reacte ネイティブを使用し、ネイティブの VideoView を使用して、Android 用の Google IMA SDK を使用した広告付きの動画を表示します。ビデオが再生され、広告が再生されますが、「続きを読む」と「広告をスキップ」を含む Web ビューは表示されません。ビュー階層に追加されますが、サイズは 0,0 で、子はありません。ネイティブ アプリでまったく同じコードを使用する場合。すべてが期待どおりに機能します。
もう少しコンテキスト:
- ビデオ プレーヤーと google ima SDK の統合は、google ima サンプル アプリから直接コピーされます。
- コンポーネントがネイティブ android アプリに配置されると、すべて正常に動作します。
- ビュー階層を調べると、webview が追加され、サイズが 0,0 であることは明らかです
- 自分でネイティブ Web ビューを追加すると、完全に正常にレンダリングされます。
React Native コンポーネントからの関連コード:
@SuppressLint("ViewConstructor")
public class ReactVideoViewWithAds extends FrameLayout implements
LifecycleEventListener {
private VideoPlayerWithAdPlayback mVideoPlayerWithAdPlayback;
private RelativeLayout mCompanionAdSlot;
private VideoPlayerController mVideoPlayerController;
public ReactVideoViewWithAds(ThemedReactContext themedReactContext) {
super(themedReactContext);
createViews();
themedReactContext.addLifecycleEventListener(this);
}
private void createViews() {
FrameLayout.LayoutParams companionAdLayoutParams = new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
(int) (50 * getResources().getSystem().getDisplayMetrics().density));
companionAdLayoutParams.gravity = Gravity.CENTER_HORIZONTAL;
mCompanionAdSlot = new RelativeLayout(getContext());
mCompanionAdSlot.setBackgroundColor(Color.BLUE);
addView(mCompanionAdSlot, companionAdLayoutParams);
//player with ad playback
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.MATCH_PARENT,
FrameLayout.LayoutParams.MATCH_PARENT);
mVideoPlayerWithAdPlayback = new VideoPlayerWithAdPlayback(getContext());
addView(mVideoPlayerWithAdPlayback, layoutParams);
initPlayer();
}
private void initPlayer() {
mVideoPlayerController = new VideoPlayerController(
getContext(),
mVideoPlayerWithAdPlayback,
null,
null,
"nl",
mCompanionAdSlot,
null);
}