Impossibile ottenere il token del dispositivo APNS su iOS 13


14

Ho un problema relativo al token del dispositivo APNS. Prima stavo usando Xcode 10.2 e iOS 12.1. In questo momento ho usato per ottenere il token del dispositivo con il metodo delegato

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

Mi sto registrando per APNS in questo modo e funzionava bene.

UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    center.delegate = self;
    [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
                if(!error){
                    [[UIApplication sharedApplication] registerForRemoteNotifications];
                }
    }];

Ora, quando iOS 13 installato sul mio dispositivo iPhone e usando Xcode 11, il metodo delegato didRegisterForRemoteNotificationsWithDeviceToken non viene chiamato. Impossibile capire questo problema. Ho già fatto ricerche su questo, so che ci sono alcuni cambiamenti nell'ottenere token dal metodo delegato ma nel mio caso il metodo delegato non viene nemmeno chiamato. Di nuovo funziona bene per iOS 12.


Ora è risolto. Ho dovuto creare tutti i certificati per Xcode 11 dal portale degli sviluppatori e ha funzionato.
IOS Dev

@IOSDev Per favore documenta quello che hai fatto. Sto incontrando la stessa cosa ora; c'è un buon karma da avere qui, credo.
Darren Black,

1
Hai trovato una soluzione per questo? sto correndo con lo stesso problema.
Aman.Samghani il

1
@ Aman.Samghani: SÌ, non arriva la prima volta quando viene generato un avviso per la notifica push. Ho dovuto chiamare nuovamente lo stesso codice del registro delle notifiche push, quindi ho ottenuto il token del dispositivo. Quindi in due o tre volte ho ottenuto il token.
IOS Dev

Risposte:


15

Basta riavviare il tuo iPhone. È così semplice e nel 90% dei casi risolverà il tuo problema.


1
Vorrei leggere questo commento prima. È stato sprecato 5 ore ++ per eseguire il debug e fissare follemente il profilo ecc.
zuyao88,

1
Lavora con me, iOS 13.3.1
Jhonattan il

è una cosa strana, ho passato 3 ore a capire cosa non va,
fakiho,

2

Accedi su https://appleid.apple.com/ , quindi apri l'URL " https://developer.apple.com/account/ios/identifier/bundle " o " https://developer.apple.com/account/resources / certificati / elenco ".

Innanzitutto, crea due nuovi certificati: (1) Apple Development Sign sviluppa versioni di sviluppo delle tue app iOS, macOS, tvOS e watchOS. Per l'uso in Xcode 11 o versioni successive. (2) Distribuzione Apple Firma le tue app per l'invio all'App Store o per la distribuzione ad hoc. Da utilizzare con Xcode 11 o successivo.

Quindi trova il menu "Identificatori" tramite l'URL " https://developer.apple.com/account/resources/identifiers/list ". Modifica i tuoi identificatori della tua app, assicurati che il Certificato SSL di sviluppo e il Certificato SSL di produzione siano aggiunti alle Notifiche push.

Successivamente, apri il menu "Profili" tramite l'URL " https://developer.apple.com/account/resources/profiles/list ". Assicurati che i certificati come tipo di distribuzione siano utilizzati in Xcode 11 o versioni successive e risparmia

Infine, scarica il file del profilo di provisioning e i file dei certificati CA creati sul MAC, che verranno aggiunti a XCode e all'applicazione della catena chiave facendo doppio clic sui file separatamente.

Inoltre, ricorda di riavviare il telefono cellulare e assicurati di aver configurato correttamente la notifica remota.


1

Ho anche affrontato lo stesso problema. Ho provato molti scenari. Ho avuto successo dopo aver fatto i seguenti passaggi:

  1. Dispositivo riavviato
  2. Chiamato il registerForRemoteNotifications metodo nel thread principale.

Nel mio caso, stavo ottenendo un token del dispositivo, ma c'è un ritardo nella risposta (penso a causa della registrazione di notifiche remote in un thread in background). Ma dopo essersi spostato [[UIApplication sharedApplication] registerForRemoteNotifications]nel thread principale, tutto funziona bene.

Ecco il mio codice:

    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    center.delegate = delegate;
    [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
        if(!error){
            dispatch_async(dispatch_get_main_queue(), ^{
                [[UIApplication sharedApplication] registerForRemoteNotifications];
                [self callCompletion:TRUE completion:completion];
            });
        }
    }];

Spero che questo possa aiutare.


non funziona affatto
Vyachaslav Gerchicov il

0

Ho appena risolto questo problema in questo modo seguendo i passaggi seguenti.

Aggiungi un po 'di stampa nel metodo didRegisterForRemoteNotificationsWithDeviceToken e mantieni i dispositivi connessi.

  1. Sono andato alle capacità di destinazione.
  2. Disattiva la notifica push
  3. Crea ed esegui l'app sul dispositivo e attendi.
  4. Quindi controllare la console in cui è stato visualizzato il messaggio di errore Notifica push non riuscita.
  5. Interrompere l'esecuzione dell'app.
  6. Attiva di nuovo la notifica push.
  7. Vai su https://developer.apple.com/ Scegli Account -> Certificati, identificatori e seleziona il tuo progetto ProvisionalProfiles -> Chiavi -> fai clic su modifica e salva dopo aver scaricato il profilo provvisorio e fai doppio clic su di esso.
  8. Crea ed esegui l'app sul dispositivo.
  9. Quindi funziona benissimo.

    Spero che questo aiuti qualcuno.


-2

È correlato a DeviceSupport mancante nell'installazione XCode, per la versione della piattaforma utilizzata dal dispositivo di distribuzione.

Nel mio caso, mancava la piattaforma 13.1. Per risolvere, aggiungi semplicemente DeviceSupports nella cartella

Xcode.app/Contents/Develper/Platforms/iPhoneOS.platform/DeviceSupport

Puoi scaricare DeviceSupport mancante da: https://github.com/iGhibli/iOS-DeviceSupport/tree/master/DeviceSupport


Nessuna fortuna @Giuseppe, anche se non funziona per 12.4.2
IOS Dev

Ora è risolto. Ho dovuto creare tutti i certificati per Xcode 11 e ha funzionato.
IOS Dev

Ho creato entrambi i certificati ma non funziona ancora. Ho anche controllato DeviceSupports e la 13.1 è lì. Sto usando xcode 11.1 e test su iPhone 7 con iOS 13.1. Eventuali suggerimenti?
Ugo Chirico,

1
Ho aggiunto le modalità in background: recupero, elaborazione e notifica remota, ho riavviato il mio iPhone e poi ha funzionato. Davvero non capisco perché, ma ora funziona
Ugo Chirico,

in che modo il supporto del dispositivo per il simulatore appartiene a un problema relativo a un dispositivo reale?
Vyachaslav Gerchicov il

-2

Prova questo.

  1. Rimuovi la tua applicazione.
  2. Riavvia il telefono.
  3. Compilare ed eseguire (reinstallare l'applicazione) sul dispositivo.

Ha funzionato per me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.