it-swarm.dev

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 de carteira única do Google Chrome. 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 chrome identity :

para manter constante o ID do aplicativo, você precisa copiar a chave no manifest.json instalado para o seu 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 manifest.json (que contém o campo "chave") para o painel cromado? O problema é que o usuário envia um erro para mim: 

Ocorreu um erro: falha ao processar seu item.

campo chave não é permitido no manifesto. 

38
31415926

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 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 é configurando o campo "key" no arquivo de manifesto, como a documentação sugere .

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

Screenshot: Public key (paste into manifest.json to preserve extension ID) crxviewer.js:528 "key": "....", crxviewer.js:529 Calculated extension ID: jifpbeccnghkjeaalbbjmodiffmgedin

Se você tiver não publicado sua extensão ou não quiser usar a Chrome Web Store, será necessário primeiro gerar uma chave privada.

  1. Vá para chrome://extensions/ e ative o modo Developer.
  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. Alternativamente, 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, ou seja, "directory/manifest.json" é ruim, "manifest.json" é bom).
    • Adicione o arquivo .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.

94
Rob W

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 virtual. 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.

9
kzahel

Para qualquer um que tenha problema ao carregar a extensão descompactada com o campo-chave no arquivo manifest.json

Remova sua extensão publicada se você a tiver em sua lista de extensões, mas desativada. Caso contrário, sua extensão dev local não será carregada e nenhum erro será mostrado. O motivo é que o Chrome detecta chaves duplicadas para a extensão e a ignora silenciosamente.

0
holmberd