Сбой приложения Android c при настройке прослушивателя видео с вознаграждением

#android #c #firebase #admob

#Android #c #firebase #admob

Вопрос:

Я добавляю награды AdMob в свое приложение для Android на C с помощью исходного кода:

 class RewardedVideoListener: public firebase::admob::rewarded_video::Listener {
public:
    //RewardedVideoListener() {}
    //RewardedVideoListener(FirebaseScene* scene) : scene(scene) {}
    void OnRewarded(firebase::admob::rewarded_video::RewardItem reward) override {
        //::LogMessage("Rewarding user with %f %s.", reward.amount, reward.reward_type.c_str());
        int a = 1;
    }
    void OnPresentationStateChanged(firebase::admob::rewarded_video::PresentationState state) override {
        int b = 1;
    }
};


static void OnRewardVideoInited(const firebase::Future<void>amp; future) {
    namespace rewarded_video = firebase::admob::rewarded_video;
    if (future.error() == firebase::admob::kAdMobErrorNone) {
        RewardedVideoListener rewarded_listener;
        rewarded_video::SetListener(amp;rewarded_listener);

        firebase::admob::AdRequest request = GetRequest();
        rewarded_video::LoadAd(kRewardedVideoAdUnit, request);
        rewarded_video::LoadAdLastResult().OnCompletion(OnRewardVideoLoaded);
    }
}


int AdMobC::showBanner() {
    firebase::App* app;
    app = ::firebase::App::Create(GetJniEnv(), GetActivity());
    firebase::admob::Initialize(*app, kAdMobAppID);

    // Start up rewarded video ads and associated mediation adapters.
    namespace rewarded_video = firebase::admob::rewarded_video;
    rewarded_video::Initialize();
    rewarded_video::InitializeLastResult().OnCompletion(OnRewardVideoInited);

    return 1;
}
  

всякий раз, когда я добавляю эти строки:

 RewardedVideoListener rewarded_listener;
rewarded_video::SetListener(amp;rewarded_listener);
  

Я получаю ‘A / libc: фатальный сигнал 11 (SIGSEGV), код 1 (SEGV_MAPERR), ошибка addr 0x8 в tid 18423 (adarts.fuelhunt), pid 18423 (adarts.fuelhunt)’

Интересно, что я делаю не так? Я некоторое время не использовал C .

Комментарии:

1. Уверен, что rewarded_video::SetListener(amp;rewarded_listener); это хорошо работает с локально определенной переменной? Что произойдет, если rewarded_listener выйдет за рамки и перестанет существовать?

2. ДА. Похоже, это проблема.