Как я могу отключить "Добро пожаловать, Имя!" баннерное уведомление для Game Center?

Что касается этого вопроса , я обнаружил, что баннеры вызывают замедление работы на iOS 5. Оказывается, сообщение Game Center «Добро пожаловать, вы вошли в систему» ​​делает то же самое, и иногда оно прерывает меня несколько раз в игре, если я входить/выходить из приложения во время игры, так как оно многократно входит/выходит из системы.

Есть ли способ отключить это уведомление, оставив Game Center включенным? Я попытался отозвать права на уведомление баннера из Game Center, но всплывающее окно все еще появляется.

Я согласен, что эта функция бесполезна, если вход не удался, мы узнаем!

Ответы (4)

Этот баннер входа в систему является предоставленным аспектом API Game Center в iOS SDK, насколько мне известно, у разработчика нет способа отключить его открытие после завершения входа в Game Center. Как пользователь, конечно, нет возможности отключить его, потому что он является частью скомпилированного исходного кода приложения.

Однако обратите внимание, что причиной задержек и пропусков является не баннер. На самом деле это весь процесс входа в Game Center. Мой единственный совет: когда вы открываете игру, в которой есть логины Game Center, открываете ее до первого функционального экрана и просто ждете ~ 5-10 секунд, необходимых для отображения баннера Game Center. После того, как баннер отобразится и исчезнет, ​​действуйте в обычном режиме, и вас это больше не повлияет.

Примерно так я и предполагал
Забавно то, что я был где-то без подключения («Нет службы» в строке меню), и у меня все равно появилось всплывающее окно.
К сожалению, я не очень хорошо знаком с API Game Center, но баннер «Добро пожаловать» может появиться, когда вы обычно регистрируетесь в Game Center. Онлайн или нет. Это означает, что приложение зарегистрировано в Game Center, чтобы соответствующим образом реагировать на достижения, (кешированные) списки лидеров и т. д. Как правило, это хранилище Game Center.

Да, можно программно подавить приветственный баннер Game Center из вашего приложения, по крайней мере, в iOS 7. Мой подход основан на нескольких наблюдениях:

  1. Баннер представлен как дополнительный UIWindow в вашем UIApplication.
  2. Это окно всегда отображается с индексом 1 (при условии, что ваше приложение использует только одно окно).
  3. Баннер имеет высоту 66 пикселей на iPad и 64 на iPhone.
  4. Баннер содержит подвид 42x42 пикселя для значка Game Center.
  5. Известно, когда может появиться баннер. (т.е. в течение нескольких секунд после создания объекта GKLocalPlayer при запуске для проверки аутентификации.)

Таким образом, вы можете просто несколько раз опрашивать окна вашего приложения в течение этих нескольких секунд, ожидая появления дополнительного окна. (Наблюдение за ключом и значением, вероятно, является «правильным» способом сделать это, но я ленив.) Когда появится окно, проверьте, содержит ли оно иерархию подпредставления, как описано выше, что указывает на то, что это, вероятно, баннер Game Center. Если это так, установите альфа окна на 0. Вот и все.

Вот некоторый код, который выполняет это в моем приложении. Я вызываю этот метод сразу после попытки аутентифицировать локального игрока, и он вызывает себя в течение нескольких секунд, пока не найдет (и не скроет) баннер, или же истечет время ожидания:

- (void)suppressGCBanner:(id)object {
    int osVersion = [[[UIDevice currentDevice] systemVersion] intValue];
    if (osVersion != 7) return;  // only tested against iOS 7

    static int iter = 0;    // try for 4 seconds, typically takes about one second for banner to appear
    static int origWindowCount = 0;

    NSArray* windows = [UIApplication sharedApplication].windows;
    if (origWindowCount == 0) origWindowCount = (int)[windows count];

    BOOL ipad = UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad;
    float bannerHeight = ipad ? 66.0f : 64.0f;  // GC banner has height 66 on iPad, 64 on iPhone

    if ([windows count] > origWindowCount) {
        NSLog(@"suppressGCBanner: found extra window, testing");

        UIWindow* window = [windows objectAtIndex:1]; // in my testing, the GC banner is always at index 1

        for (UIView* view in [window subviews]) {
            CGRect frame = view.frame;
            NSLog(@"subview size: %f, %f", frame.size.width, frame.size.height);

            if (frame.size.height != bannerHeight) continue;

            for (UIView* subview in [view subviews]) {
                CGRect frame = subview.frame;
                NSLog(@"sub-subview size: %f, %f", frame.size.width, frame.size.height);

                if (frame.size.width == 42.0f && frame.size.height == 42.0f) { // Game Center icon is 42x42
                    NSLog(@"found GameCenter banner: hiding. iter = %i", iter);

                    window.alpha = 0.0f; // make the window invisible!

                    return;
                }
            }
        }
    }

    if (++iter > 200) {
        NSLog(@"suppressGCBanner: timeout, bailing");
        return;
    }

    // ____ otherwise recurse
    [self performSelector:@selector(suppressGCBanner:) withObject:nil afterDelay:0.02f];
}

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

Кажется, есть способ отключить Game Center, но это не очевидно или не было для меня.

Выйдите из Game Center.

Если вы затем запустите игру Game Center, появится всплывающее окно с предложением снова войти в Game Center.

Вместо входа в систему нажмите кнопку «Отмена» в верхнем левом углу. Затем выйдите из игры и повторяйте, пока не откроете игру и не отмените вход в Game Center три раза.

Появится новое диалоговое окно с вопросом, хотите ли вы отключить Game Center. Запустите игру снова, и больше ничего из Game Center не появится.

Пока это, кажется, сработало для меня. PITA пока хранит молчание.

Попробуй это:

Settings > Notifications > Game Center

Там вы должны увидеть все параметры, связанные с предупреждениями, уведомлениями и т. д., которые вы можете изменить или полностью отключить.

Сообщение «С возвращением, <YourGameCenterName>», которое появляется, когда игра входит в Game Center, не выглядит как стандартный баннер Центра уведомлений (начнем с того, что оно не похоже на таковой), и на него не влияют эти настройки; У меня отключены уведомления GC, но это сообщение все еще появляется.
Как сказал djacobson, и я указал в вопросе, обычные параметры уведомлений не работают, это сообщение, кажется, само по себе.