Esta série de tutoriais ilustra todas as partes móveis de um complemento funcional do Google Sala de Aula. Cada etapa do tutorial aborda conceitos específicos, implementando-os em um único aplicativo da Web. O objetivo é ajudar você a configurar e iniciar um complemento funcional.
O complemento precisa interagir com um projeto na nuvem do Google Cloud. Se você não conhece o Google Cloud, recomendamos que leia os guias de introdução. Você gerencia credenciais, acesso à API e o SDK do Google Workspace Marketplace no console do Google Cloud. Para mais informações sobre o SDK do Marketplace, acesse a página do guia de listagem do Google Workspace Marketplace.
Neste guia, abordamos os seguintes tópicos:
- Use o Google Cloud para criar uma página a ser mostrada em um iframe no Google Sala de Aula.
- Adicione o Logon único (SSO) do Google e permita que os usuários façam login.
- Faça chamadas de API para anexar o complemento a uma tarefa.
- Atenda aos principais requisitos de envio de complementos e recursos necessários.
Este guia pressupõe que você esteja familiarizado com programação e conceitos básicos de desenvolvimento da Web. Recomendamos que você leia o Guia de configuração do projeto antes de começar os tutoriais. Esta página contém detalhes importantes de configuração que não são totalmente abordados nos tutoriais.
Exemplos de implementações
Um exemplo de referência completo está disponível em Python. Implementações parciais também estão disponíveis em Java e Node.js. Essas implementações são as fontes do código de exemplo encontrado nas páginas subsequentes.
Onde fazer o download
Os exemplos de Python e Java estão disponíveis nos repositórios do GitHub:
O exemplo do Node.js pode ser baixado como um arquivo ZIP:
Pré-requisitos
Revise as seções a seguir para preparar um novo projeto de complementos.
Certificado HTTPS
Embora seja possível hospedar seu app em qualquer ambiente de desenvolvimento, o complemento do Google Sala de Aula só está disponível em https://. Portanto, você precisa de um servidor com criptografia SSL para implantar o app ou testá-lo no iframe do complemento.
É possível usar localhost com um certificado SSL. Considere o mkcert se
precisar criar um certificado para desenvolvimento local.
Projeto do Google Cloud
Você precisa configurar um projeto na nuvem do Google para uso com esses exemplos. Consulte o Guia de criação de projetos na nuvem do Google Cloud para uma visão geral das etapas necessárias para começar. A seção Configurar um projeto na nuvem do Google no primeiro tutorial também explica as ações de configuração específicas a serem realizadas.
Quando terminar, faça o download do ID do cliente OAuth 2.0 como um arquivo JSON. Você precisa adicionar esse arquivo de credenciais ao diretório de exemplo descompactado. Consulte Entender os arquivos para locais específicos.
Credenciais de OAuth
Siga estas etapas para criar novas credenciais do OAuth:
- Acesse a página de credenciais do Google Cloud. Verifique se o projeto correto está selecionado na parte de cima da tela.
- Clique em CRIAR CREDENCIAIS e escolha ID do cliente OAuth no menu suspenso.
- Na página seguinte:
- Defina o Tipo de aplicativo como Aplicativo da Web.
- Em URIs de redirecionamento autorizados, clique em ADICIONAR URI. Adicione o caminho completo para uma rota de callback do seu aplicativo. Por exemplo,
https://my.domain.com/auth-callbackouhttps://localhost:5000/callback. Você cria e processa essa rota mais tarde neste tutorial. É possível editar ou adicionar mais rotas desse tipo a qualquer momento. - Clique em CRIAR.
- Em seguida, você vai receber uma caixa de diálogo com as credenciais recém-criadas. Escolha a opção FAZER O DOWNLOAD DO JSON. Copie o arquivo JSON baixado para o diretório do servidor.
Pré-requisitos específicos do idioma
Consulte o arquivo README em cada repositório para conferir a lista mais atualizada de pré-requisitos.
Python
Nosso exemplo de Python usa o framework Flask. Você pode fazer o download do código-fonte completo nos links fornecidos.
Se necessário, instale o Python 3.7 ou mais recente e verifique se o pip está disponível.
python3 -m ensurepip --upgradeTambém recomendamos que você configure e ative um novo ambiente virtual do Python.
python3 -m venv .classroom-addon-envsource .classroom-addon-env/bin/activate
Há um requirements.txt em cada subdiretório de tutorial nos exemplos baixados. Você pode instalar rapidamente as bibliotecas necessárias usando pip. Use os comandos a seguir para instalar as bibliotecas necessárias para o primeiro tutorial.
cd flask/01-basic-apppip install -r requirements.txt
Node.js
Nosso exemplo de Node.js usa o framework Express. Você pode fazer o download do código-fonte completo nos links fornecidos.
Este exemplo requer o Node.js v16.13 ou mais recente.
Instale os módulos de nó necessários usando npm.
npm installJava
Nosso exemplo de Java usa o framework Spring Boot. Você pode fazer o download do código-fonte completo nos links fornecidos.
Instale o Java 11 ou mais recente se ele ainda não estiver instalado na sua máquina.
Os aplicativos Spring Boot podem usar o Gradle ou o Maven para processar builds e gerenciar dependências. Este exemplo inclui o wrapper do Maven, que garante um build bem-sucedido sem exigir que você instale o Maven.
No diretório em que você baixou ou clonou o projeto, execute os comandos a seguir para garantir que você tenha os pré-requisitos para executar o projeto.
java --version./mvnw --version
Ou no Windows:
java -versionmvnw.cmd --version
Entender os arquivos
As seções a seguir descrevem o layout dos diretórios de exemplo.
Nomes de diretórios
Cada repositório contém vários diretórios cujos nomes começam com um número, como /01-basic-app/. Os números correspondem a etapas específicas do tutorial.
Cada diretório contém um app da Web totalmente funcional que implementa os recursos descritos em um tutorial específico. Por exemplo, o /01-basic-app/
diretório contém a implementação final do tutorial Criar um complemento.
Conteúdo do diretório
O conteúdo do diretório varia de acordo com a linguagem de implementação:
Python
A raiz do diretório contém os seguintes arquivos:
main.py: o ponto de entrada do aplicativo Python. Especifique a configuração do servidor que você quer usar nesse arquivo e execute-o para iniciar o servidor.requirements.txt- os módulos Python necessários para executar o app da Web. Eles podem ser instalados automaticamente usandopip install -r requirements.txt.client_secret.json- o arquivo de chave secreta do cliente baixado do Google Cloud. Ele não está incluído no arquivo de exemplo. Renomeie e copie o arquivo de credenciais baixado para cada raiz de diretório.
config.py: opções de configuração para o servidor Flask.O diretório
webappcontém o conteúdo do aplicativo da Web. Inclui o seguinte:O diretório
/templates/com modelos Jinja para várias páginas.O diretório
/static/com imagens, CSS e arquivos JavaScript auxiliares.routes.py- os métodos de handler para as rotas do aplicativo da Web.__init__.py: o inicializador do módulowebapp. Esse inicializador inicia o servidor Flask e carrega as opções de configuração definidas emconfig.py.Arquivos adicionais conforme exigido por uma etapa específica do tutorial.
Node.js
Cada etapa do tutorial pode ser encontrada no próprio <step>
subdiretório. Cada etapa contém:
- Arquivos estáticos, como JavaScript, CSS e imagens, são encontrados na
./<step>/publicpasta. - Os roteadores Express são encontrados nas pastas
./<step>/routes. - Os modelos HTML são encontrados nas pastas
./<step>/views. - O aplicativo do servidor é
./<step>/app.js.
Java
O diretório do projeto inclui o seguinte:
- O diretório
src.maincontém o código-fonte e a configuração para executar o aplicativo. Esse diretório inclui o seguinte: + O diretóriojava.com.addons.springcontém os arquivosApplication.javaeController.java. O arquivoApplication.javaé responsável por executar o servidor de aplicativos, enquanto oController.javaprocessa a lógica do endpoint. + O diretórioresourcescontém o diretóriotemplatescom arquivos HTML e JavaScript. Ele também contém o arquivoapplication.propertiesque especifica a porta para executar o servidor, o caminho para o arquivo do keystore e o caminho para o diretóriotemplates. Este exemplo inclui o arquivo do keystore no diretórioresources. Você pode armazená-lo onde preferir, mas atualize oapplication.propertiesarquivo com o caminho de acordo.pom.xmlcontém as informações necessárias para criar o projeto e definir as dependências necessárias..gitignorecontém nomes de arquivos que não devem ser enviados ao Git. Adicione o caminho para o keystore nesse.gitignore. No exemplo fornecido, esse ésecrets/*.p12. A finalidade do keystore é discutida na seção abaixo. Para o tutorial 2 e versões mais recentes, inclua também o caminho para o arquivoclient_secret.jsonpara garantir que você não inclua seus secrets em um repositório remoto. Para o tutorial 3 e versões mais recentes, adicione o caminho para o arquivo de banco de dados H2 e a fábrica de armazenamento de dados de arquivos. Mais informações sobre a configuração desses armazenamentos de dados podem ser encontradas no terceiro tutorial sobre como processar visitas repetidas.mvnwemvnw.cmdsão os executáveis do wrapper do Maven para Unix e Windows, respectivamente. Por exemplo, executar./mvnw --versionno Unix gera a versão do Apache Maven, entre outras informações.- O diretório
.mvncontém a configuração do wrapper do Maven.
Executar o servidor de exemplo
Você precisa iniciar o servidor para testá-lo. Siga estas instruções para executar o servidor de exemplo no idioma de sua preferência:
Python
Credenciais de OAuth
Crie e faça o download das credenciais do OAuth conforme descrito anteriormente. Coloque o arquivo JSON no diretório raiz ao lado do arquivo de inicialização do servidor do aplicativo.
Configurar o servidor
Você tem várias opções para executar o servidor da Web. No final do arquivo Python, adicione um dos seguintes:
localhostnão seguro. Isso é adequado apenas para testes diretos em uma janela do navegador. Domínios não seguros não podem ser carregados no iframe do complemento do Google Sala de Aula.if __name__ == "__main__": # Disable OAuthlib's HTTPs verification. os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1" # Run the web app at http://localhost:5000. app.run(debug=True)localhostseguro. Você precisa especificar uma tupla de arquivos de chave SSL para o argumentossl_context.if __name__ == "__main__": # Run the web app at https://localhost:5000. app.run(host="localhost", ssl_context=("localhost.pem", "localhost-key.pem"), debug=True)Servidor Gunicorn. Isso é adequado para um servidor pronto para produção ou implantação na nuvem. Recomendamos definir uma variável de ambiente
PORTpara uso com essa opção de inicialização.if __name__ == "__main__": # Run the web app at https://<your domain>:<server_port>. # Defaults to https://<your domain>:8080. server_port = os.environ.get("PORT", "8080") app.run(debug=True, port=server_port, host="0.0.0.0")
Iniciar o servidor
Execute o aplicativo Python para iniciar o servidor conforme configurado na etapa anterior.
python main.pyClique no URL que aparece para conferir o app da Web em um navegador e confirmar se ele está funcionando corretamente.
Node.js
Configurar o servidor
Para executar o servidor por HTTPS, você precisa criar um autocertificado usado para executar o aplicativo por HTTPS. Essas credenciais precisam ser salvas como sslcert/cert.pem e sslcert/key.pem na pasta raiz do repositório. Talvez seja necessário adicionar essas chaves ao chaveiro do SO para que o navegador as aceite.
Verifique se *.pem está no arquivo .gitignore, porque você não quer confirmar o arquivo no Git.
Iniciar o servidor
Você pode executar o aplicativo com o comando a seguir, substituindo step01 pela etapa correta que você quer executar como um servidor (por exemplo, step01 para 01-basic-app e step02 para 02-sign-in).
npm run step01ou
npm run step02Isso inicia o servidor da Web em https://localhost:5000.
Você pode encerrar o servidor com Control + C no terminal.
Java
Configurar o servidor
Para executar o servidor por HTTPS, você precisa criar um autocertificado usado para executar o aplicativo por HTTPS.
Considere usar o mkcert para desenvolvimento local. Depois de instalar o mkcert, os comandos a seguir geram um certificado armazenado localmente para execução por HTTPS.
mkcert -installmkcert -pkcs12 -p12-file <path_to_keystore> <domain_name>
Este exemplo inclui o arquivo do keystore no diretório de recursos. Você pode armazená-lo onde preferir, mas atualize o arquivo application.properties com o caminho de acordo. O nome de domínio é o domínio em que você executa o projeto (por exemplo, localhost).
Verifique se *.p12 está no arquivo .gitignore, porque você não quer confirmar o arquivo no Git.
Iniciar o servidor
Inicie o servidor executando o método main no arquivo Application.java. No IntelliJ, por exemplo, você pode clicar com o botão direito em
Application.java > Run 'Application' no diretório
src/main/java/com/addons/spring ou abrir o Application.java
arquivo para clicar na seta verde à esquerda da assinatura do método main(String[] args). Como alternativa, você pode executar o projeto em uma janela do terminal:
./mvnw spring-boot:runou no Windows:
mvnw.cmd spring-boot:runIsso inicia o servidor em https://localhost:5000 ou na porta especificada em application.properties.