Como alterar o ID do aplicativo empacotado em chrome Ou Por que precisamos de um campo-chave no manifest.json?

Estou desenvolvendo um aplicativo empacotado para o armazenamento do Chrome usando pagamentos únicos com carteira eletrônica. Para o meu aplicativo eu preciso verificar durante o tempo de execução se o usuário comprou o aplicativo ou não decidir se deve ser uma funcionalidade de demonstração ou funcionalidade completa.

De acordo com a documentação da API de identidade do chrome:

Para manter o ID do aplicativo constante, você precisa copiar a chave no manifest.json instalado para o manifesto de origem.

Eu tenho 2 perguntas sobre esse procedimento:

1) sob qual condição o id do meu aplicativo pode mudar? Tentei reinstalar o aplicativo e fiz atualizações, mas o ID dos aplicativos continua o mesmo. Se não houver como alterar o ID dos aplicativos, por que preciso desse procedimento?

2) como posso carregar meu arquivo zip com o manifest.json (que contém o campo “chave”) para o painel do Chrome? O problema é que o usuário envia um erro para mim:

Ocorreu um erro: falha ao processar seu item.

O campo chave não é permitido no manifesto.

Depois de fazer o upload para a Chrome Web Store, seu ID de extensão é fixo e não pode mais ser alterado.

O ID é derivado do arquivo .pem que foi criado na primeira vez em que você (ou a Chrome Web Store) compactou a extensão em um arquivo .crx . Quando você carrega uma extensão em “modo descompactado”, um ID é gerado automaticamente de maneira imprevisível. A única maneira de controlar o ID de extensão durante o desenvolvimento é definir o campo "key" no arquivo de manifesto, como a documentação sugere .

Depois de publicar a extensão na Chrome Web Store, você pode facilmente obter o valor desse campo de "key" usando o Visualizador da fonte de extensão do Chrome . Depois de instalar a extensão, acesse a página de detalhes da sua loja on-line do Chrome e clique no botão CRX para visualizar a fonte. Quando o visualizador da fonte de extensão do Chrome carregou a extensão, ela exibirá a chave no console, que pode ser copiada diretamente para o manifest.json:

Captura de tela: Chave pública (cole no manifest.json para preservar a ID da extensão) crxviewer.js: 528

Se você não publicou sua extensão ou não deseja usar a Chrome Web Store, é necessário primeiro gerar uma chave privada.

  1. Vá para chrome://extensions/ e ative o modo de desenvolvedor.
  2. Clique em “Pack extension …”, selecione o diretório do seu aplicativo / extensão e confirme.
    Agora você tem um arquivo .crx e um arquivo .pem. Faça o backup da chave privada (arquivo .pem )!
  3. A extensão mencionada pode ser usada para obter as mesmas informações. Como alternativa, visite a demonstração on-line em https://robwu.nl/crxviewer/ e selecione o arquivo crx que você acabou de criar (novamente: basta abrir o console para ver a “chave” e o ID da extensão).

Quando você estiver pronto para enviar seu aplicativo / extensão para a Chrome Web Store, siga estas etapas:

  1. Crie um arquivo zip contendo sua extensão (importante: manifest.json deve estar na raiz, ex. “Directory / manifest.json” é ruim, “manifest.json” é bom).
    • Adicione o arquivo key.pem como key.pem !
      (isso é necessário para preservar o ID da extensão)
  2. Faça o upload da extensão para a Chrome Web Store ( sem o campo “chave” no manifest.json , o CWS rejeitará qualquer upload que contenha um campo “chave”).

Para atualizações subsequentes, “key.pem” não deve ser adicionado ao arquivo zip, porque a Chrome Web Store não precisa mais dela.

Espero que alguém possa dar uma resposta melhor que eu. O id de um aplicativo é gerado pelo google quando você o envia pela primeira vez para a loja on-line. No entanto, não é o mesmo id que você tem quando está desenvolvendo localmente. Seu navegador chrome gerou algum outro id usando algum outro mecanismo.

Quando você estiver desenvolvendo localmente a partir do diretório do código-fonte como uma extensão descompactada e quiser usar o ID que o armazenamento da Web do Chrome atribuiu ao seu aplicativo, coloque a “chave” no manifesto e recarregue o aplicativo. Isso ajuda você, pois muitas APIs esperam que o chrome.runtime.id (o ID do seu aplicativo) tenha o mesmo valor do aplicativo na loja. Você pode deixar a “chave” no seu manifesto e ela será ignorada.