¿Cómo puedo desactivar la notificación del banner "Bienvenido, Nombre!" para Game Center?

7

Según esta pregunta Encontré pancartas que causan una ralentización en iOS 5, aparece el mensaje "Bienvenido, has iniciado sesión" en el Game Center, y en ocasiones me interrumpe varias veces en un juego si cambio / fuera de la aplicación mientras se reproduce, ya que se inicia / cierra sesión repetidamente.

¿Hay alguna forma de deshabilitar esta notificación mientras dejas Game Center habilitado? Intenté revocar los derechos de notificación de banner de Game Center pero aún aparece la ventana emergente.

    
pregunta Ben Brocka 05.01.2012 - 15:25

4 respuestas

3

Ese banner de inicio de sesión es un aspecto proporcionado de la API de Game Center en los SDK de iOS, por lo que sé, no hay forma de que un desarrollador lo deshabilite cuando se inicie el inicio de sesión de Game Center. Como usuario, ciertamente no hay manera de desactivarlo, ya que es parte del código fuente compilado de la aplicación.

Sin embargo, tenga en cuenta que no es el banner el que está causando los retrasos y saltos. En realidad, es todo el proceso de inicio de sesión en Game Center. Mi único consejo es cuando abres un juego que tiene inicios de sesión en Game Center, lo abres a la primera pantalla funcional y solo esperas ~ 5-10 segundos para que aparezca el anuncio de Game Center. Una vez que la pancarta haya aparecido y haya desaparecido, proceda normalmente y no se verá afectado más.

    
respondido por el Jason Salaz 06.02.2012 - 19:21
2

Sí, es posible suprimir el banner de bienvenida de Game Center programáticamente desde su aplicación, al menos en iOS 7. Mi enfoque se basa en algunas observaciones:

  1. El banner se presenta como una ventana UI adicional dentro de su aplicación UIA.
  2. Parece que esta ventana siempre aparece en el índice 1. (suponiendo que su aplicación solo usa una ventana).
  3. El banner tiene 66 píxeles de alto en iPad, 64 en iPhone.
  4. El banner contiene una subvista de 42x42 píxeles para el icono de Game Center.
  5. Se sabe cuándo es probable que aparezca el banner. (es decir, a los pocos segundos de crear un objeto GKLocalPlayer en el inicio para probar la autenticación).

Por lo tanto, puede simplemente sondear las ventanas de su aplicación repetidamente en estos pocos segundos, esperando que aparezca la ventana adicional. (La observación de valores clave es probablemente la forma "correcta" de hacer esto, pero soy perezoso). Cuando se muestre la ventana, compruebe si contiene una jerarquía de subvistas como la descrita anteriormente, lo que indica que probablemente sea la pancarta de Game Center. Si es así, establece el alfa de la ventana en 0. Eso es todo.

Aquí hay un código que logra esto en mi aplicación. Llamo a este método inmediatamente después de intentar autenticar al jugador local, y se llama a sí mismo durante unos segundos hasta que encuentra (y oculta) el banner, o si no se agota:

- (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];
}

De vez en cuando verás un parpadeo de línea de un solo píxel en la parte superior de la pantalla antes de que se oculte el banner, pero en general este método parece funcionar lo suficientemente bien. Úsalo bajo tu propio riesgo, y disfruta!

    
respondido por el BenW 30.07.2014 - 10:22
1

Parece que hay una forma de desactivar Game Center, pero no es obvio, o no lo fue para mí.

Cerrar sesión en Game Center.

Si luego inicias un juego de Game Center, aparecerá un mensaje que te pedirá que inicies sesión en Game Center nuevamente.

En lugar de iniciar sesión, presione el botón Cancelar en la esquina superior izquierda. Luego salga del juego y repita hasta que haya abierto el juego y haya cancelado el inicio de sesión del Game Center tres veces.

Aparece un nuevo cuadro de diálogo que le pregunta si desea desactivar Game Center. Comienza de nuevo el juego y ya no aparece nada de Game Center.

Hasta ahora esto parece haber funcionado para mí. El PITA se ha mantenido en silencio por ahora.

    
respondido por el Olaf 20.01.2013 - 01:18
-1

Prueba esto:

Settings > Notifications > Game Center

Allí debería ver todas las opciones relacionadas con alertas, notificaciones, etc., que puede cambiar o deshabilitar por completo.

    
respondido por el l'L'l 06.01.2012 - 22:18

Lea otras preguntas en las etiquetas