Реклама iOS Admob начинает воспроизводиться с помощью кнопок блокировки экрана — ОШИБКА?

У меня есть приложение для потоковой передачи музыки, в котором я использую элементы управления экрана блокировки для воспроизведения/паузы/перехода к следующей песне.

В моем приложении есть реклама Admob Interstitial.

Однако, когда я использую элементы управления экрана блокировки, они также передаются видеообъявлению, из-за чего видеообъявление начинает воспроизводиться вместе с музыкой моего приложения. Есть ли способ предотвратить это?

Вот как я обрабатываю элементы управления экраном блокировки. Я не взаимодействую с рекламой ни в одном из этих кодов, но все же управление передается видеоплееру admob:

- (void)remoteControlReceivedWithEvent:(UIEvent *)event {

    ////NSLog(@"CustomApp:remoteControlReceivedWithEvent:%@", event.description);
    if (event.type == UIEventTypeRemoteControl)
    {
        switch (event.subtype)
        {
            case UIEventSubtypeRemoteControlPlay:
                //  play the video
                dispatch_async(dispatch_get_main_queue(), ^{
                    [[[SoundEngine sharedInstance] audioPlayer] resume];
                    //[[SoundEngine sharedInstance] setLockScreenElapsedTime];
                });

                break;

            case  UIEventSubtypeRemoteControlPause:
                // pause the video
                dispatch_async(dispatch_get_main_queue(), ^{
                    [[[SoundEngine sharedInstance] audioPlayer] pause];
                    //[[SoundEngine sharedInstance] setLockScreenElapsedTime];
                });

                break;

            case  UIEventSubtypeRemoteControlNextTrack:
                // to change the video
                dispatch_async(dispatch_get_main_queue(), ^{
                    [[SoundEngine sharedInstance] nextClicked];
                    //[[SoundEngine sharedInstance] setLockScreenElapsedTime];
                });

                break;

            case  UIEventSubtypeRemoteControlPreviousTrack:
                // to play the privious video
                dispatch_async(dispatch_get_main_queue(), ^{
                    [[SoundEngine sharedInstance] prevClicked];
                    //[[SoundEngine sharedInstance] setLockScreenElapsedTime];
                });

                break;

            default:
                break;
        }
    }
}

person sudoExclaimationExclaimation    schedule 21.06.2016    source источник
comment
Почему вы не отключаете AdMob, когда ваше приложение находится в фоновом режиме?   -  person Paulw11    schedule 22.06.2016
comment
что значит отключить адмоб? Разве концепция не заключается в том, что, когда я буду готов, я использую метод presentFromRootViewController, чтобы фактически представить его? в противном случае объявления остаются готовыми в фоновом режиме.   -  person sudoExclaimationExclaimation    schedule 22.06.2016
comment
У вас должен быть активный видеоплеер где-то в вашей иерархии представлений, который получает события   -  person Paulw11    schedule 22.06.2016
comment
не думаю, я использую streamingkit, который только аудио.   -  person sudoExclaimationExclaimation    schedule 22.06.2016
comment
Вы получаете звук из видеоплеера AdMob, поэтому где-то должен быть видеоплеер AdMob; Если бы не было, то он не мог бы ничего играть.   -  person Paulw11    schedule 22.06.2016
comment
это межстраничная полноэкранная реклама admob. Google создает свой собственный видеоплеер, который, как я полагаю, не предоставляется разработчику.   -  person sudoExclaimationExclaimation    schedule 22.06.2016
comment
Давайте продолжим это обсуждение в чате.   -  person Paulw11    schedule 22.06.2016


Ответы (1)


Я также недавно столкнулся с межстраничными видеообъявлениями AdMob, воспроизводимыми после того, как я позвонил в загрузку, но ни разу не позвонил в настоящее время. Кроме того, когда я демонстрировал рекламу, переключатель отключения звука не работал.
Использовались версии AdMob SDK 7.19.1 и 7.20.0.

В конце концов я определил, что это проблема AdMob, но это было не так очевидно. Часть, которая вызывала ошибку, заключалась в регистрации UserAgent для UserDefauts. В частности, следующие строки вызывают проблему.

let userAgent : String = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9"
UserDefaults.standard.register(defaults: ["UserAgent" : userAgent])

Вероятно, AdMob затрагивает пользовательский агент, хранящийся в UserDefaults, при загрузке рекламы. Однако мне абсолютно необходим этот пользовательский агент, поэтому я все еще не уверен, что могу сделать, но, по крайней мере, мы знаем, как SDK AdMob подводит нас в этом случае.

person ykonda    schedule 14.05.2017
comment
Вместо того, чтобы устанавливать User-Agent в Userdefaults, почему бы не установить его для каждого заголовка запроса? - person sudoExclaimationExclaimation; 17.05.2017
comment
@PranoyC в WKWebView раньше пользовательский агент запроса был перезаписан тем, что находится в UserDefaults, но в iOS 10 об этом, похоже, заботятся с помощью customUserAgent. - person ykonda; 19.05.2017