10 votes

Comment puis-je désactiver la notification de la bannière "Bienvenue, nom !" pour le Game Center ?

Conformément à cette question J'ai constaté que les bannières provoquaient des ralentissements sous iOS 5, il s'avère que le message du Game Center "welcome, you have been signed in" le fait aussi, et à l'occasion il m'interrompra plusieurs fois dans un jeu si je change d'application en cours de jeu, car les logs sont en entrée/sortie de manière répétée.

Existe-t-il un moyen de désactiver cette notification tout en laissant le Game Center activé ? J'ai essayé de révoquer les droits de notification de bannière du Game Center, mais la fenêtre contextuelle apparaît toujours.

5voto

Christopher Scott Points 665

Cette bannière de connexion est un aspect fourni par l'API Game Center dans les SDK iOS. Pour autant que je sache, il n'existe aucun moyen pour un développeur de l'empêcher de s'ouvrir lorsque la connexion au Game Center est terminée. En tant qu'utilisateur, il n'y a certainement aucun moyen de la désactiver, car elle fait partie du code source compilé de l'application.

Notez toutefois que ce n'est pas la bannière qui est à l'origine des retards et des sauts. Il s'agit en fait de l'ensemble du processus de connexion au Game Center. Mon seul conseil est le suivant : lorsque vous ouvrez un jeu qui comporte des connexions au Game Center, ouvrez-le jusqu'au premier écran fonctionnel et attendez les 5 à 10 secondes nécessaires à l'apparition de la bannière Game Center. Une fois la bannière affichée et disparue, procédez normalement et vous ne devriez plus être affecté.

3voto

BenW Points 131

Oui, il est possible de supprimer la bannière de bienvenue du Game Center par programmation à partir de votre application, du moins sous iOS 7. Mon approche est basée sur quelques observations :

  1. La bannière est présentée comme une UIWindow supplémentaire dans votre UIApplication.
  2. Cette fenêtre semble toujours apparaître à l'index 1 (en supposant que votre application n'utilise qu'une seule fenêtre).
  3. La bannière a une hauteur de 66 pixels sur l'iPad, 64 sur l'iPhone.
  4. La bannière contient une vue secondaire de 42x42 pixels pour l'icône de Game Center.
  5. On sait quand la bannière est susceptible d'apparaître. (c'est-à-dire dans les quelques secondes qui suivent la création d'un objet GKLocalPlayer au lancement pour tester l'authentification).

Vous pouvez donc simplement interroger les fenêtres de votre application de manière répétée pendant ces quelques secondes, en attendant que la fenêtre supplémentaire apparaisse. () Lorsque la fenêtre apparaît, vérifiez si elle contient une hiérarchie de sous-vues comme décrit ci-dessus, ce qui indique qu'il s'agit probablement de la bannière du Game Center. Si c'est le cas, réglez l'alpha de la fenêtre sur 0. C'est tout.

Voici un peu de code qui accomplit ceci dans mon application. J'appelle cette méthode immédiatement après avoir tenté d'authentifier le joueur local, et elle s'appelle elle-même pendant quelques secondes jusqu'à ce qu'elle trouve (et cache) la bannière, ou qu'elle s'arrête :

- (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 temps en temps, vous verrez une ligne d'un pixel clignoter en haut de l'écran avant que la bannière ne soit cachée, mais en général, cette méthode semble fonctionner assez bien. Utilisez-la à vos risques et périls, et amusez-vous bien !

2voto

strager Points 41713

Il semble exister un moyen de désactiver le Game Centre, mais il n'est pas évident, ou ne l'était pas pour moi.

Déconnectez-vous du Game Centre.

Si vous lancez ensuite un jeu du Game Centre, une fenêtre apparaîtra pour vous demander de vous connecter à nouveau au Game Centre.

Au lieu de vous connecter, appuyez sur le bouton Annuler dans le coin supérieur gauche. Quittez ensuite le jeu et répétez l'opération jusqu'à ce que vous ayez ouvert le jeu et annulé la connexion au Game Centre à trois reprises.

Une nouvelle boîte de dialogue s'affiche pour vous demander si vous souhaitez désactiver le Game Centre. Lancez à nouveau le jeu et plus aucun message du Game Centre n'apparaîtra.

Jusqu'à présent, cela semble avoir fonctionné pour moi. Le PITA s'est tu pour l'instant.

-1voto

l'L'l Points 8737

Essayez ça :

Settings > Notifications > Game Center

Vous devriez y voir toutes les options liées aux alertes, aux notifications, etc. que vous pouvez modifier ou désactiver complètement.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X