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

Gemäß dieser Frage habe ich Banner gefunden, die 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 unterbricht sie mich mehrmals in einem Spiel, wenn ich Schalten Sie die App während des Spielens ein/aus, da sie sich wiederholt ein-/ausloggt.

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

Ich stimme zu, dass diese Funktion nicht nützlich ist, wenn die Anmeldung fehlgeschlagen ist, werden wir es herausfinden!

Antworten (4)

Dieses Anmeldebanner ist ein bereitgestellter Aspekt der Game Center-API in den iOS-SDKs. Soweit mir bekannt ist, gibt es als 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 beim Game Center. Mein einziger Rat ist, wenn Sie ein Spiel mit Game Center-Logins öffnen, öffnen Sie es zum ersten Funktionsbildschirm und warten Sie einfach die ~ 5-10 Sekunden, die es dauert, bis das Game Center-Banner angezeigt wird. Nachdem das Banner angezeigt und wieder verschwunden ist, fahren Sie normal fort und Sie sollten nicht weiter beeinträchtigt werden.

Das ist so ziemlich das, was ich vermutet habe
Das Lustige ist, ich war irgendwo ohne Verbindung ("Kein Dienst" in der Menüleiste) und ich habe immer noch das Popup erhalten.
Leider kenne ich die Game Center-APIs nicht so gut, aber das Willkommensbanner kann erscheinen, wenn Sie sich allgemein bei Game Center registriert haben. Online oder nicht. Das bedeutet, dass sich die App beim Game Center registriert, um angemessen auf Erfolge, (gecachte) Bestenlisten usw. reagieren zu können. Generell der Speicher des Game Centers.

Ja, es ist möglich, das Game Center-Willkommensbanner 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 innerhalb Ihrer UIA-Anwendung dargestellt.
  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 voraussichtlich erscheinen wird. (dh innerhalb weniger Sekunden nach dem Erstellen eines GKLocalPlayer-Objekts beim Start, um die Authentifizierung zu testen.)

Sie können also in diesen wenigen Sekunden einfach die Fenster Ihrer Anwendung wiederholt abfragen und darauf warten, dass das zusätzliche Fenster erscheint. (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 dies der Fall ist, setzen Sie das Alpha des Fensters auf 0. Das war's.

Hier ist ein Code, der dies in meiner App bewerkstelligt. Ich rufe diese Methode sofort auf, nachdem ich versucht habe, den lokalen Player zu authentifizieren, und sie ruft sich einige Sekunden lang selbst auf, bis sie das Banner findet (und verbirgt), oder es kommt zu einer Zeitüberschreitung:

- (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 sehen Sie oben auf dem Bildschirm eine einzelne Pixellinie flackern, bevor das Banner ausgeblendet wird, aber im Allgemeinen scheint diese Methode gut genug zu funktionieren. Nutzung auf eigene Gefahr und viel Spaß!

Es scheint eine Möglichkeit zu geben, das Game Center zu deaktivieren, aber es ist nicht offensichtlich oder war es 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 Game Center-Anmeldung dreimal abgebrochen haben.

Ein neuer Dialog erscheint, in dem Sie gefragt werden, ob Sie Game Center deaktivieren möchten. Starten Sie das Spiel erneut und es werden keine Game Center-Sachen mehr angezeigt.

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

Versuche dies:

Settings > Notifications > Game Center

Dort sollten Sie alle Optionen in Bezug auf Warnungen, Benachrichtigungen usw. sehen, die Sie ändern oder vollständig deaktivieren können.

Die „Willkommen zurück, <YourGameCenterName>“-Meldung, die erscheint, wenn sich ein Spiel bei Game Center anmeldet, scheint kein standardmäßiges Benachrichtigungscenter-Banner zu sein (für den Anfang sieht es nicht so aus) und wird von diesen nicht beeinflusst die Einstellungen; Ich habe GC-Benachrichtigungen deaktiviert und diese Meldung wird immer noch angezeigt.
Wie Djacobson sagte und ich in der Frage angegeben habe, funktionieren normale Benachrichtigungsoptionen nicht, diese Nachricht scheint eine eigene Sache zu sein.