BlogRight arrowTutorialRight ArrowCompras no aplicativo para iOS, parte 5: lista de códigos SKError e como resolvê-los.
BlogRight arrowTutorialRight ArrowCompras no aplicativo para iOS, parte 5: lista de códigos SKError e como resolvê-los.

Compras no aplicativo para iOS, parte 5: lista de códigos SKError e como resolvê-los.

Compras no aplicativo para iOS, parte 5: lista de códigos SKError e como resolvê-los.
Listen to the episode
Compras no aplicativo para iOS, parte 5: lista de códigos SKError e como resolvê-los.

Neste posto, vou abordar os SKErrors: quais os problemas que eles acarretam e o que fazer com eles. Para cada erro, trabalharemos três aspectos: por que ele ocorre, como resolvê-los e que mensagem exibir na notificação de erro.

⭐️ Download our guide on in-app techniques which will make in-app purchases in your app perfect

SKError.Code.unknown, código 0

O que significa. Um erro ocorreu por uma razão desconhecida.

Como corrigir. Nenhuma ação precisa ser tomada por parte dos desenvolvedores. Este erro também ocorre quando se tenta comprar produtos ao usar as versões de simuladores do iOS 14 e superiores. Neste caso, para comprar um produto, use o teste local do StoreKit ou um dispositivo/emulador real com a versão iOS inferior ao iOS 14.

Qual mensagem deve ser exibida. Infelizmente, não é possível realizar a compra no momento devido a um motivo desconhecido. Tentar novamente mais tarde.

SKError.Code.clientInvalid, código 1

O que significa. O usuário não consegue fazer uma compra. Por exemplo, uma criança tenta comprar um produto quando a função de controle dos pais no dispositivo está ativada.

Como corrigir. Nenhuma ação precisa ser tomada por parte dos desenvolvedores.

Qual mensagem deve ser exibida. A compra não pode ser concluída. Troque de conta ou dispositivo.

SKError.Code.paymentCancelled, código 2

O que significa. O usuário chegou à tela de pagamento, mas mudou de ideia sobre fazer a compra e clicou em “cancelar”.

Como corrigir. Do ponto de vista técnico, não ocorreu nenhum erro e, neste caso, nada precisa ser feito. Do ponto de vista comercial, você pode continuar trabalhando com o usuário em questão, por exemplo, oferecendo um desconto.

Qual mensagem deve ser exibida. Neste caso, você tem duas opções. A mais fácil é não fazer nada. No entanto, você pode tentar recuperar o usuário com uma mensagem como esta: “Você cancelou sua compra. Gostaria de experimentar uma assinatura com desconto?”.

SKError.Code.paymentInvalid, código 3

O que significa. Por algum motivo, o pagamento falhou: o cartão expirou ou não havia saldo suficiente para esta compra.

Como corrigir. Nenhuma ação precisa ser tomada por parte dos desenvolvedores.

Qual mensagem deve ser exibida. Sua compra foi recusada. Verifique as informações de pagamento e certifique-se de que sua conta tem saldo suficiente.

SKError.Code.paymentNotAllowed, código 4

O que significa. Provavelmente, o cartão de ter algumas restrições de compra: os limites são fixos ou a função de compras on-line não está disponível.

Como corrigir. Nenhuma ação precisa ser tomada por parte dos desenvolvedores.

Qual mensagem deve ser exibida. Não é possível concluir a compra para a forma de pagamento selecionada. Verifique se o método de pagamento selecionado permite a realização de compras on-line.

SKError.Code.storeProductNotAvailable, código 5

O que significa. O usuário está tentando comprar um produto que não está disponível na região em que esta loja é utilizada.

Como corrigir. O desenvolvedor deve verificar a disponibilidade dos produtos na região e loja do usuário. Para essa finalidade, você pode usar SKStorefront.

Qual mensagem deve ser exibida. Este produto não está disponível na sua região. Mude de loja e tente novamente.

SKError.Code.cloudServicePermissionDenied, código 6

O que significa. O usuário não permitiu o acesso às informações de seu serviços no iCloud.

Como corrigir. Nenhuma ação precisa ser tomada por parte dos desenvolvedores.

Qual mensagem deve ser exibida. Para ser honesto, eu nunca me deparei com esse erro. Na verdade, você pode simplesmente escrever que a compra foi recusada.

SKError.Code.cloudServiceNetworkConnectionFailed, código 7

O que significa. Ao fazer uma compra, o dispositivo não estava conectado à Internet.

Como corrigir. Nenhuma ação precisa ser tomada por parte dos desenvolvedores.

Qual mensagem deve ser exibida. A compra não pode ser concluída porque seu dispositivo não está conectado à Internet.  Tente novamente mais tarde usando uma conexão estável com a Internet.

Start for free

Adapty handles all SKErrors automatically,

as well as provides the server-side validation and covers all side cases

Start for free

SKError.Code.cloudServiceRevoked, código 8

O que significa. Este dispositivo não tem acesso ao serviço de pagamento do StoreKit. Geralmente, este erro ocorre no Sandbox.

Como corrigir. Crie um novo usuário no Sandbox ou simplesmente tente repetir a operação.

Qual mensagem deve ser exibida. Lamento, mas ocorreu um erro.

SKError.Code.privacyAcknowledgementRequired, código 9

O que significa. O usuário não aceitou os termos de uso na AppStore. Como consta na documentação, “o usuário ainda não aceitou a política de privacidade da Apple para o Apple Music”. Na verdade, parece um erro, pois não há motivo para se mencionar a Apple Music.

Como corrigir. Nenhuma ação precisa ser tomada por parte dos desenvolvedores.

Qual mensagem deve ser exibida. A compra não pode ser concluída porque você não aceitou os termos de uso da AppStore. Confirme o seu consentimento nas configurações e depois retorne para concluir a compra.

SKError.Code.unauthorizedRequestData, código 10

O que significa. Sua ID do aplicativo não contempla o direito necessário para o uso do StoreKit.

Como corrigir. Você precisa concluir o processo de configuração de compras no aplicativo.

Qual mensagem deve ser exibida. Ocorreu um erro. Tente novamente mais tarde.

SKError.Code.invalidOfferIdentifier, código 11

O que significa. O usuário está tentando comprar um produto com uma oferta promocional incorreta.

Como corrigir. Nenhuma ação precisa ser tomada por parte dos desenvolvedores.

Qual mensagem deve ser exibida. A oferta promocional é inválida ou expirou.

SKError.Code.invalidSignature, código 12

O que significa. A assinatura da oferta promocional para a solicitação do StoreKit foi gerada incorretamente.

Como corrigir. Verifique como a assinatura foi gerada e corrija os erros. Se você usar a Adapty, faça o download da Chave de Assinatura.

Qual mensagem deve ser exibida. Infelizmente, ocorreu um erro ao aplicar o código promocional. Tente novamente mais tarde.

SKError.Code.missingOfferParams, código 13

O que significa. Os parâmetros da oferta promocional foram incorretamente configurados.

Como corrigir. Verifique e corrija os parâmetros da sua oferta promocional.

Qual mensagem deve ser exibida. Infelizmente, ocorreu um erro ao aplicar a oferta promocional. Tente novamente mais tarde.

SKError.Code.invalidOfferPrice, código 14

O que significa. O usuário está tentando comprar um produto por um preço irrelevante. Provavelmente, o preço exibido na AppStore perdeu a validade.

Como corrigir. Faça a atualização do preço para esta oferta na AppStore.

Qual mensagem deve ser exibida. Infelizmente, sua compra não pode ser concluída. Tente novamente mais tarde.

Conclusão

O tratamento correto dos erros melhora a experiência do usuário e pode recuperar alguns dos usuários que não conseguiram efetuar o pagamento imediato da assinatura por algum motivo. Estes são os erros mais comuns ao implementar compras em um aplicativo no sistema iOS:

  • SKError.Code.unknown, um erro desconhecido; 
  • SKError.Code.paymentCancelled, quando o usuário cancela a compra; 
  • SKError.Code.paymentInvalid, quando não é possível processar o pagamento.

Na realidade, o tratamento de erros e a implementação de compras são processos complicados. Portanto, eu recomendo tentar o SDK da Adapty para iOS, que facilita a implementação de compras no aplicativo e oferece outros benefícios, como analytics de assinaturas, análise de coorte, testes a/b para paywalls e validação de recibos do lado do servidor.

Further reading

Adapty June Updates: funnels, paywall visits export to Amazon S3, Adjust OAuth, and hiring!
Adapty June Updates: funnels, paywall visits export to Amazon S3, Adjust OAuth, and hiring!
July 7, 2022
5 min read
How to integrate Mixpanel Analytics into your iOS App
How to integrate Mixpanel Analytics into your iOS App
March 29, 2021
8 min read
Organic growth and Y Combinator
Organic growth and Y Combinator
August 24, 2021
14 min read, 50 min listen