Não obtendo o token de dispositivo APNS no ios 13

14

Tenho um problema relacionado ao token de dispositivo APNS. Antes de usar o Xcode 10.2 e o iOS 12.1. Neste momento, eu costumava obter o token do dispositivo no método delegado

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

Estou me registrando no APNS assim e estava funcionando bem.

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

Agora, quando instalado o iOS 13 no meu dispositivo iPhone e usando o Xcode 11, o método delegate didRegisterForRemoteNotificationsWithDeviceToken não é chamado. Não foi possível entender esse problema. Eu já fiz uma pesquisa sobre isso, sei que existem algumas alterações na obtenção de token do método delegado, mas no meu caso, o método delegado nem é chamado. Mais uma vez, está funcionando bem para o iOS 12.

IOS Dev
fonte
Está resolvido agora. Tive que criar todos os certificados para o Xcode 11 a partir do portal do desenvolvedor e funcionou.
IOS Dev
@IOSDev Documente o que você fez. Estou encontrando a mesma coisa agora; acho que há um bom carma aqui.
Darren Black
11
Você encontrou alguma solução para isso? Estou executando com o mesmo problema.
Aman.Samghani
11
@ Aman.Samghani: SIM, não está chegando pela primeira vez quando um alerta é gerado para a notificação por push. Eu tive que chamar novamente o mesmo código do registro de notificação por push e obtive o token do dispositivo. Então, em duas ou três vezes tentei obter token.
IOS Dev

Respostas:

15

Basta reiniciar o seu iPhone. É simples e, em 90% dos casos, resolverá o seu problema.

Aleksandr Honcharov
fonte
11
Eu gostaria de ler este comentário anteriormente. Foi desperdiçado 5 horas + para depurar e olhar loucamente no perfil etc
zuyao88 17/03
11
Trabalhe para mim, iOS 13.3.1
Jhonattan
é uma coisa estranha de acontecer, passei 3 horas descobrindo o que
havia de
2

Faça logon em https://appleid.apple.com/ e abra o URL " https://developer.apple.com/account/ios/identifier/bundle " ou " https://developer.apple.com/account/resources / certificados / lista ".

Primeiro, crie dois novos certificados: (1) versões de desenvolvimento do Apple Development Sign dos seus aplicativos iOS, macOS, tvOS e watchOS. Para uso no Xcode 11 ou posterior. (2) Distribuição da Apple Assine seus aplicativos para envio à App Store ou para distribuição Ad Hoc. Para uso com o Xcode 11 ou posterior.

Em seguida, encontre o menu "Identificadores" via url " https://developer.apple.com/account/resources/identifiers/list ". Edite seus identificadores do aplicativo, verifique se o certificado SSL de desenvolvimento e o certificado SSL de produção foram adicionados às notificações por push.

Em seguida, abra o menu "Perfis" via url " https://developer.apple.com/account/resources/profiles/list ". Verifique se os Certificados como tipo de DistributionFor, que serão usados ​​no Xcode 11 ou posterior, e salve

Por fim, baixe o arquivo Perfil de provisionamento e os arquivos de Certificados da CA criados no seu MAC, que serão adicionados ao XCode e ao aplicativo de cadeia de chaves clicando duas vezes nos arquivos separadamente.

Além disso, lembre-se de reiniciar o telefone celular e verifique se configurou a notificação remota corretamente.

Dengshan Tian
fonte
1

Eu também enfrentei o mesmo problema. Eu tentei muitos cenários. Eu obtive sucesso depois de executar as etapas abaixo:

  1. Dispositivo reiniciado
  2. Chamado o registerForRemoteNotifications método no thread principal.

No meu caso, eu estava recebendo um token de dispositivo, mas há um atraso na resposta (acho que devido ao registro de notificações remotas em um encadeamento em segundo plano). Mas depois de mover [[UIApplication sharedApplication] registerForRemoteNotifications]a linha principal, tudo funciona bem.

Aqui está o meu código:

    [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];
            });
        }
    }];

Espero que isso ajude.

Kirti Nikam
fonte
não funciona de todo
Vyachaslav Gerchicov 17/04
0

Acabei de resolver esse problema desta maneira, seguindo as etapas abaixo.

Adicione alguma impressão no método didRegisterForRemoteNotificationsWithDeviceToken e mantenha os dispositivos conectados.

  1. Foi para os recursos de destino.
  2. Desativar a notificação push
  3. Crie e execute o aplicativo no dispositivo e aguarde.
  4. Em seguida, verifique o console que recebeu a mensagem de erro de falha na notificação por push.
  5. Pare de executar o aplicativo.
  6. Ative a notificação por push novamente.
  7. Goto https://developer.apple.com/ Escolha Conta -> Certificados, identificadores & Selecione o seu ProvisionalProfiles projeto -> Chaves -> clique em editar e salvar depois que baixar perfil provisional e clique duas vezes sobre ele.
  8. Crie e execute o aplicativo no dispositivo.
  9. Então está funcionando bem.

    Espero que isso ajude alguém.

Gangireddy Rami Reddy
fonte
-2

Está relacionado ao DeviceSupport ausente na instalação do XCode, para a versão da plataforma usada pelo seu dispositivo de implantação.

No meu caso, a plataforma 13.1 estava faltando. Para resolver, basta adicionar o DeviceSupports na pasta

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

Você pode fazer o download do DeviceSupport ausente em: https://github.com/iGhibli/iOS-DeviceSupport/tree/master/DeviceSupport

Giuseppe
fonte
Sem sorte @ Giuseppe, mesmo não trabalhando para 12.4.2
IOS Dev
Está resolvido agora. Tive que criar todos os certificados para o Xcode 11 e funcionou.
IOS Dev
Criei os dois certificados, mas ainda não funciona. Também verifiquei o DeviceSupports e o 13.1 está lá. Estou usando o xcode 11.1 e testando no iphone 7 com o iOS 13.1. Alguma sugestão?
Ugo Chirico
11
Adicionei modos de segundo plano: busca, processamento e notificação remota, reiniciei meu iphone e funcionou. Realmente não entendo o porquê, mas agora funciona #
Ugo Chirico
como o suporte a dispositivos do simulador pertence a um problema relacionado a um dispositivo real?
Vyachaslav Gerchicov 17/04
-2

Tente isso.

  1. Remova seu aplicativo.
  2. Reinicie o seu telefone.
  3. Crie e execute (reinstale o aplicativo) no seu dispositivo.

Funcionou para mim.

kylie kim
fonte