Come posso disabilitare la notifica del banner "Benvenuto, Nome!" per Game Center?

7

Come per questa domanda Ho trovato dei banner che causano il rallentamento su iOS 5, si scopre che il messaggio "Benvenuto, sei stato registrato" fa anche questo, ea volte mi interrompe più volte in un gioco se accendo / fuori dall'app durante la riproduzione mentre registra in / out ripetutamente.

C'è un modo per disattivare questa notifica lasciando attivo Game Center? Ho provato a revocare i diritti di notifica banner da Game Center, ma il popup appare ancora.

    
posta Ben Brocka 05.01.2012 - 15:25
fonte

4 risposte

3

Questo banner di accesso è un aspetto fornito dell'API di Game Center negli SDK di iOS, per quanto a mia conoscenza non è possibile che uno sviluppatore lo disabiliti dall'apertura al termine dell'accesso al Game Center. Come utente, non c'è sicuramente modo di disabilitarlo, perché fa parte del codice sorgente compilato dall'applicazione.

Tuttavia, tieni presente che non è il banner a causare ritardi e salti. In realtà è l'intero processo di accesso a Game Center. Il mio unico consiglio è quando apri un gioco che ha gli accessi al Game Center, lo apri alla prima schermata funzionale, e aspetta solo i ~ 5-10 secondi necessari per rivelare il banner del Game Center. Dopo che il banner è stato visualizzato e scomparso, procedi normalmente e non dovresti esserne influenzato ulteriormente.

    
risposta data 06.02.2012 - 19:21
fonte
2

Sì, è possibile sopprimere il banner di benvenuto Game Center a livello di programmazione dalla tua app, almeno in iOS 7. Il mio approccio si basa su alcune osservazioni:

  1. Il banner viene presentato come UIWindow aggiuntivo nella tua applicazione UIA.
  2. Questa finestra sembra sempre visualizzata all'indice 1. (presumendo che la tua app utilizzi solo una finestra.)
  3. Il banner è alto 66 pixel su iPad, 64 su iPhone.
  4. Il banner contiene una sottoview di 42x42 pixel per l'icona di Game Center.
  5. È noto quando è probabile che il banner appaia. (entro pochi secondi dalla creazione di un oggetto GKLocalPlayer all'avvio per testare l'autenticazione).

Quindi puoi semplicemente eseguire il polling delle finestre dell'applicazione più volte in questi pochi secondi, in attesa che venga visualizzata la finestra aggiuntiva. (L'osservazione dei valori-chiave è probabilmente il modo "corretto" per farlo, ma io sono pigro.) Quando appare la finestra, verifica se contiene una gerarchia di subview come descritto sopra, il che indica che probabilmente è il banner del Game Center. Se lo è, imposta l'alfa della finestra su 0. Ecco fatto.

Ecco un codice che realizza ciò nella mia app. Chiamo questo metodo immediatamente dopo aver tentato di autenticare il lettore locale, e si chiama per alcuni secondi fino a quando non trova (e nasconde) il banner, altrimenti scade:

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

Di tanto in tanto vedrai uno sfarfallio di linea a pixel singolo nella parte superiore dello schermo prima che il banner sia nascosto, ma in generale questo metodo sembra funzionare abbastanza bene. Usa a tuo rischio e divertiti!

    
risposta data 30.07.2014 - 10:22
fonte
1

Sembra che ci sia un modo per disabilitare Game Center, ma non è ovvio, o non lo era per me.

Esci da Game Center.

Se poi avvii un gioco Game Center comparirà chiedendoti di accedere nuovamente a Game Center.

Invece di accedere, premi il pulsante Annulla nell'angolo in alto a sinistra. Quindi esci dal gioco e ripeti fino a quando non hai aperto il gioco e hai cancellato l'accesso al Game Center per tre volte.

Viene visualizzata una nuova finestra di dialogo in cui viene chiesto se si desidera disabilitare Game Center. Avvia di nuovo il gioco e non c'è più niente del materiale del Game Center che appare più.

Finora questo sembra aver funzionato per me. Il PITA è rimasto zitto per ora.

    
risposta data 20.01.2013 - 01:18
fonte
-1

Prova questo:

Settings > Notifications > Game Center

Dovresti visualizzare tutte le opzioni relative agli avvisi, alle notifiche, ecc. che puoi modificare o disabilitare completamente.

    
risposta data 06.01.2012 - 22:18
fonte

Leggi altre domande sui tag