Wie kann ich "Willkommen, Name!" Deaktivieren? Bannerbenachrichtigung für Game Center?

8

Gemäß dieser Frage habe ich festgestellt, dass Banner unter iOS 5 zu einer Verlangsamung führen. Es stellt sich heraus, dass die Game Center-Nachricht "Willkommen, Sie wurden angemeldet" dies auch tut, und gelegentlich wird sie mich in einem Spiel mehrmals unterbrechen, wenn ich Schalten Sie die App während der Wiedergabe ein / aus, während sie sich wiederholt an- und abmeldet.

Gibt es eine Möglichkeit, diese Benachrichtigung zu deaktivieren, während Game Center aktiviert bleibt? Ich habe versucht, die Bannerbenachrichtigungsrechte von Game Center zu widerrufen, aber das Popup wird weiterhin angezeigt.

Ben Brocka
quelle

Antworten:

3

Dieses Anmeldebanner ist ein bereitgestellter Aspekt der Game Center-API in den iOS-SDKs. Soweit mir bekannt ist, gibt es für Entwickler keine Möglichkeit, das Öffnen zu deaktivieren, wenn die Game Center-Anmeldung abgeschlossen ist. Als Benutzer gibt es sicherlich keine Möglichkeit, es zu deaktivieren, da es Teil des kompilierten Quellcodes der Anwendung ist.

Beachten Sie jedoch, dass es nicht das Banner ist, das die Verzögerungen und Sprünge verursacht. Es ist eigentlich der gesamte Anmeldevorgang bei Game Center. Mein einziger Rat ist, wenn Sie ein Spiel mit Game Center-Anmeldungen öffnen, es bis zum ersten Funktionsbildschirm öffnen und nur ca. 5-10 Sekunden warten, bis das Game Center-Banner angezeigt wird. Nachdem das Banner angezeigt und verschwunden ist, gehen Sie normal vor und Sie sollten nicht weiter betroffen sein.

Jason Salaz
quelle
Das ist ziemlich genau das, was ich angenommen habe
Ben Brocka
Lustige Sache ist, ich war irgendwo ohne Konnektivität ("Kein Dienst" in der Menüleiste) und ich habe immer noch das Popup.
Loïc Wolff
Leider kenne ich die Game Center-APIs nicht so gut, aber das Banner "Willkommen" wird möglicherweise angezeigt, wenn Sie sich allgemein bei Game Center registriert haben. Online oder nicht. Dies bedeutet, dass sich die App bei Game Center registriert hat, um angemessen auf Erfolge, (zwischengespeicherte) Bestenlisten usw. zu reagieren. Im Allgemeinen der Game Center-Speicher.
Jason Salaz
2

Ja, es ist möglich, das Game Center-Begrüßungsbanner programmgesteuert in Ihrer App zu unterdrücken, zumindest unter iOS 7. Mein Ansatz basiert auf einigen Beobachtungen:

  1. Das Banner wird als zusätzliches UIWindow in Ihrer UIApplication angezeigt.
  2. Dieses Fenster scheint immer bei Index 1 zu erscheinen (vorausgesetzt, Ihre App verwendet nur ein Fenster.)
  3. Das Banner ist auf dem iPad 66 Pixel hoch, auf dem iPhone 64 Pixel.
  4. Das Banner enthält eine 42 x 42 Pixel große Unteransicht für das Game Center-Symbol.
  5. Es ist bekannt, wann das Banner wahrscheinlich erscheint. (dh innerhalb weniger Sekunden nach dem Erstellen eines GKLocalPlayer-Objekts beim Start, um die Authentifizierung zu testen.)

So können Sie die Fenster Ihrer Anwendung in diesen wenigen Sekunden einfach wiederholt abfragen und darauf warten, dass das zusätzliche Fenster angezeigt wird. (Das Beobachten von Schlüsselwerten ist wahrscheinlich der "richtige" Weg, dies zu tun, aber ich bin faul.) Wenn das Fenster angezeigt wird, testen Sie, ob es eine Unteransichtshierarchie wie oben beschrieben enthält, was darauf hinweist, dass es sich wahrscheinlich um das Game Center-Banner handelt. Wenn ja, setzen Sie das Alpha des Fensters auf 0. Das war's.

Hier ist ein Code, der dies in meiner App erreicht. Ich rufe diese Methode sofort nach dem Versuch auf, den lokalen Player zu authentifizieren, und sie ruft sich einige Sekunden lang selbst auf, bis das Banner gefunden (und ausgeblendet) wird, oder es tritt eine Zeitüberschreitung auf:

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

Hin und wieder flackert eine einzelne Pixelzeile am oberen Bildschirmrand, bevor das Banner ausgeblendet wird. Im Allgemeinen scheint diese Methode jedoch gut genug zu funktionieren. Verwenden Sie auf eigenes Risiko und genießen Sie!

BenW
quelle
1

Es scheint eine Möglichkeit zu geben, Game Center zu deaktivieren, aber es ist nicht offensichtlich oder für mich nicht.

Melden Sie sich vom Game Center ab.

Wenn Sie dann ein Game Center-Spiel starten, werden Sie aufgefordert, sich erneut bei Game Center anzumelden.

Anstatt sich anzumelden, klicken Sie auf die Schaltfläche Abbrechen in der oberen linken Ecke. Beenden Sie dann das Spiel und wiederholen Sie den Vorgang, bis Sie das Spiel geöffnet und die Anmeldung im Game Center dreimal abgebrochen haben.

In einem neuen Dialogfeld werden Sie gefragt, ob Sie Game Center deaktivieren möchten. Starten Sie das Spiel erneut und es taucht nichts mehr im Game Center auf.

Bisher scheint das bei mir funktioniert zu haben. Die PITA hat vorerst geschwiegen.

Olaf
quelle
-1

Versuche dies:

Settings > Notifications > Game Center

Dort sollten alle Optionen für Warnungen, Benachrichtigungen usw. angezeigt werden, die Sie ändern oder vollständig deaktivieren können.

l'L'l
quelle
1
Die Meldung "Willkommen zurück, <IhrGameCenterName>", die angezeigt wird, wenn sich ein Spiel bei Game Center anmeldet, scheint kein Standard-Benachrichtigungscenter-Banner zu sein (für den Anfang sieht es nicht so aus) und ist von diesen nicht betroffen die Einstellungen; Ich habe GC-Benachrichtigungen deaktiviert und diese Meldung wird weiterhin angezeigt.
Dan J
Wie Djacobson sagte und ich in der Frage anzeigte, funktionieren normale Benachrichtigungsoptionen nicht. Diese Nachricht scheint eine eigene Sache zu sein.
Ben Brocka