Pergunta

Estou desenvolvendo um aplicativo com notificações push. Para verificar todas as possibilidades de interação do usuário, eu gostaria de testar meu aplicativo quando um usuário se recusa a ter notificações push habilitado para meu aplicativo durante a primeira partida.

A caixa de diálogo (iniciada por registerForRemoteNotificationTypes), no entanto, aparece apenas uma vez por aplicação. Como faço para redefinir a memória do meu aplicativo do iPhone OS. Excluindo o aplicativo e reinstalar não ajuda.

Foi útil?

Solução

Nota técnica TN2265: Solução de problemas notificações push

A primeira vez que uma aplicação compatível com o impulso registros achados para notificações push, iOS pergunta ao usuário se deseja receber notificações para esse aplicativo. Uma vez o usuário tem respondido a esse alerta é não apresentou novamente a menos que o dispositivo é restaurada ou o aplicativo tem sido desinstalado por pelo menos um dia.

Se você quiser simular uma primeira vez executar do seu aplicativo, você pode deixar o aplicativo desinstalado por um dia. Você pode conseguir este último sem realmente esperando um dia, definindo o relógio do sistema transmitir um dia ou mais, transformando o dispositivo desligado completamente, em seguida, transformando a parte de trás dispositivo.

Update: Como observado nos comentários abaixo, esta solução parou de trabalhar desde iOS 5.1. Gostaria de incentivar a apresentação de um bug com a Apple para que eles possam atualizar sua documentação. A solução atual parece ser redefinir conteúdo e as configurações do dispositivo.

Update: A nota técnica foi atualizado com novas medidas que o trabalho corretamente a partir de iOS 7

.
  1. Excluir seu aplicativo do dispositivo.
  2. Desligue o dispositivo completamente e ligá-lo novamente.
  3. Vá para Configurações> Geral> Data e hora e defina a data antes de um dia ou mais.
  4. Desligue o dispositivo completamente novo e ligue-o novamente.

UPDATE como de iOS 9

Basta apagar e reinstalar o aplicativo irá redefinir o status de notificação para notDetermined (significando prompts aparecerá).

Graças à resposta por Gomfucius abaixo: https://stackoverflow.com/a/33247900/704803

Outras dicas

Outra apenas para testar solução para isso é simplesmente mudando seu ID de pacote. Só não se esqueça de mudá-lo de volta uma vez que você está feito!

No iOS 9.0.2, estou recebendo o "registrar alerta de notificação push" cada vez que eu excluir o aplicativo e reinstalá-lo. Isto é verdade para ambas as transferências de produção AppStore e modo ad hoc.

UPDATE: Confirma-se isso está funcionando para iOS 9.x

Como já se referiu a abordagem para repor o estado de notificação para um aplicativo em um dispositivo é alterada para iOS5 um mais recente.

Isso funciona para mim no iOS6:

  • Remova o aplicativo do dispositivo
  • Definir o dispositivo de data e hora dois dias ou mais antes
  • Reinicie o dispositivo
  • Definir o dispositivo de data e hora dois dias ou mais antes
  • Reinicie o dispositivo
  • Instale e execute o aplicativo novamente

No entanto, isto só irá fazer o prompt inicial aparecer novamente -. Não irá remover qualquer outras coisas relacionadas estado impulso

O plist: /private/var/mobile/Library/RemoteNotification/Clients.plist

... contém os clientes registrados para notificações push. Removendo entrada do seu aplicativo fará com que o prompt para voltar a aparecer

Fazendo parece programação para trabalho para me everytime. Eu tenho uma compilação com a seguinte linha uncommented:

 [[UIApplication sharedApplication] unregisterForRemoteNotifications];

eu executá-lo cada vez que eu quiser cancelar o registro de PN. Você pode ter que acabar o aplicativo explicitamente da lista Recentes e brincar com a Notificação Center, em aplicativo Configurações para obtê-lo direito.

Além disso, a interface do usuário prompt perguntando ao usuário se inscrever para PN pode não aparecer. Não tenho certeza se foi desactivada em qualquer uma das versões recentes do iOS.

Como ianolito disse, colocando a data deve funcionar:

Você pode conseguir este último sem realmente esperando um dia, definindo o relógio do sistema para a frente um dia ou mais, transformando o dispositivo completamente, em seguida, virando as costas dispositivo.

Eu observei no meu dispositivo (iPhone 4, o iOS 6.1.2) definir o relógio do sistema um dia para a frente ou mesmo alguns dias não funcionou para mim. Então eu definir a data para a frente um mês e, em seguida, fez um trabalho e meu aplicativo mostrou as notificações pedido novamente.

Espero que isso ajude para qualquer um, pode ser tipo de dor de cabeça!

Eu concordo com micmdk .. Eu tinha uma configuração de ambiente de desenvolvimento com Push Notifications e precisava de uma maneira de redefinir meu telefone para se parecer com uma instalação inicial ... e apenas estes passos precisos funcionou para mim ... requer dois reboots de dispositivo:

De DOC APPLE TECH:

A redefinição do notificações push Permissão Alerta no iOS A primeira vez que um habilitado para empurrar registros de aplicativos para notificações push, iOS pergunta ao usuário se deseja receber notificações para esse aplicativo. Depois que o usuário respondeu a este alerta não é apresentada novamente a menos que o dispositivo é restaurado ou o aplicativo foi desinstalado por pelo menos um dia.

Se você quiser simular um primeiro tempo de execução do seu aplicativo, você pode deixar o aplicativo desinstalado por um dia. Você pode conseguir este último sem realmente esperando um dia, seguindo estes passos:

  1. Excluir seu aplicativo do dispositivo.

  2. Desligue o dispositivo completamente e ligá-lo novamente.

  3. Vá em Ajustes> Geral> Data e hora e defina a data antes de um dia ou mais.

  4. Desligue o dispositivo completamente novo e ligue-o novamente.

eu tenho me perguntado sobre isso no passado e chegou à conclusão de que não era realmente um caso de teste válido para o meu código. Eu não acho que o código do aplicativo pode realmente dizer a diferença entre alguém declínio notificações pela primeira vez ou depois desativá-lo a partir das definições de notificação do iPhone. É verdade que a experiência do usuário é diferente, mas o que está escondido dentro da chamada para registerForRemoteNotificationTypes.

Chamando unregisterForRemoteNotifications não remover completamente a aplicação das configurações de notificações - embora ele não remover o conteúdo das definições para essa aplicação. Então, isso ainda não vai fazer com que o diálogo seja apresentada uma segunda vez para o usuário na próxima vez que as pistas de aplicativos (pelo menos não em v3.1.3 que estou testando com). Mas como eu digo acima, você provavelmente não deveria estar se preocupando com isso.

A mesma nota técnica conforme referido na resposta aceite ( TN2265 -. solução de problemas push Notifications) desde então tem sido atualizado com uma solução para iOS 5 e acima

Em resumo:. Criar um backup e restaurar a partir dele cada vez

No iOS 5 e posterior, redefinir o alerta de notificações push permissões por restaurar o dispositivo a partir de um backup (r. 11450187). Aqui estão os passos para fazer isso de forma eficiente:

  1. Use o Xcode Organizer para instalar o aplicativo no dispositivo. A chave é instalar o aplicativo pela primeira vez, sem executá-lo.
  2. Use o iTunes para fazer backup do dispositivo.
  3. Execute o aplicativo. O alerta de notificações push permissões serão apresentados.
  4. Quando você deseja redefinir o alerta de notificações push permissões, restaurar o dispositivo a partir do backup que você criou na primeira etapa.

The Apple Nota técnica também descreveu você pode restaurar o dispositivo para reiniciar o diálogo Push Notification.

Ele não diz que você também pode usar a opção. "Geral -> Redefinir -> Apagar Todo o Conteúdo e Ajustes" na própria (iOS 5.x) dispositivo

Além da resposta de ianolito.

tive o mesmo problema com um aplicativo que eu baixei um ano e notificação push negar inicialmente. Agora querendo notificações push para trás, estes passos trabalhou para mim em iOS 7 beta. Não tenho certeza que ponto (s) desencadeou-lo exatamente.

  • Feche e excluir o aplicativo.
  • Vá para suas configurações do iCloud e excluir o aplicativo a partir do iCloud. Faça isso em todos os outros dispositivos em que você tem de backup iCloud para aplicativos habilitados. Após a desativação e exclusão fazer um novo backup. O aplicativo não deve ser listado mais sob os backups. (Este é talvez por isso que a Nota Técnica da Apple descrito por ianolito parou de funcionar no iOS 5, uma vez iCloud foi introduzido no iOS 5 e muitos têm de backup iCloud para aplicativos habilitados.)
  • Vá para suas configurações de tempo e definir o tempo mais de 1 mês de antecedência.
  • Ligue o iPhone off (sem reset).
  • Espere um minuto, ligue-o novamente e baixar o aplicativo novamente.
  • Inicie o aplicativo e I foi apresentado o diálogo novamente.
  • Permitir backup aplicativo novamente, uma vez que ainda está desativado. Corrigir a tempo.

Graças a Deus eu não tinha que "Apagar Todo o Conteúdo e Ajustes". Talvez possa ajudar alguém.

Depois de horas de busca, e nenhuma sorte com as sugestões acima, isso funcionou como um encanto para 3.x +

override func viewDidLoad() {
        super.viewDidLoad()


            requestAuthorization()

}

func requestAuthorization() {

        if #available(iOS 10.0, *) {

            UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
                print("Access granted: \(granted.description)")
            }

        } else {
            // Fallback on earlier versions
        }

    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top