Skip to content

Instantly share code, notes, and snippets.

@synga
Created July 4, 2017 00:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save synga/0563b6e749d87c7ed777ae14e9c9b69c to your computer and use it in GitHub Desktop.
Save synga/0563b6e749d87c7ed777ae14e9c9b69c to your computer and use it in GitHub Desktop.
Push notification com ionic e Google Cloud Messaging
/*
COM O FCM, PRIMEIRO INSTALA O PLUGIN QUE TA NO IONIC NATIVE MESMO https://ionicframework.com/docs/native/fcm/
FAZ COMO TODO PLUGIN, INSTALA O PLUGIN, INSTALA O WRAPPER.
DEPOIS COLOCA O PLUGIN NO SEU APP.MODULE:
*/
import { FCM } from '@ionic-native/fcm';
@NgModule({
declarations: [
MyApp
],
imports: [
...
],
bootstrap: [IonicApp],
entryComponents: [
MyApp
],
providers: [
FCM
]
})
/*
PRA FAZER O PUSH FUNCIONAR DE USUARIO PRA USUARIO EU RECOMENDO FORTEMENTE INSTALAR O PLUGIN DEVICE https://ionicframework.com/docs/native/device/
FAZ OS MESMOS PASSOS DO PLUGIN ANTERIOR E BOA.
O PLUGIN DE DEVICE TE DA A OPÇÃO DE PEGAR O UNIQUE ID DO DEVICE, POR QUE AI CASO O USUARIO QUEIRA USAR O APP NA SUA CONTA EM MAIS DE UM APARELHO VOCê CONSEGUE FAZER UM FOR, PEGAR CADA APARELHO QUE ELE USA E MANDAR O PUSH PRA TODOS OS O APARELHOS QUE ELE TA LOGADO
NO SEU FIREBASE VOCÊ VAI TER UM ESTRUTURA DO SEU USUARIO, NELA VOCÊ SALVA OS TOKENS, ALGO ASSIM:
USUARIOS
|_ USUARIO_001
|_ TOKENS
|_ DEVICE_UID: TOKEN
|_ DEVICE_UID_2: TOKEN
ENTÃO O SEU CÓDIGO PARA MANUSEAR O PUSH VC FAZ NO SEU APP.COMPONENTS, DENTRO DO DEVICE READY. PRA SALVAR O TOKEN VOCê FAZ ONDE ACHAR MELHOR, EU PREFIRO COLOCAR NA HOME E DEPOIS DO LOGIN, VOU COLOCAR TUDO JUNTO AQUI, MAS VOCÊ VE ONDE ACHA MELHOR
*/
// imports
import { FCM } from '@ionic-native/fcm';
import { Device } from '@ionic-native/fcm';
...
export class MyApp {
constructor(public fcm: FCM, public device: Device){}
platform.ready().then(() => {
//RECEBEU NOTIFICAÇÃO PUSH
fcm.onNotification().subscribe(data => {
// TRATA A NOTIFICAÇÃO, EU NORMALMENTE CRIO UM PROVIDER PRA ISSO
});
// SALVA O TOKEN DO USUARIO NO FIREBASE DELE, COMO NÃO SEI DE ONDE VC PEGA O ID, VOU SÓ COLOCAR 'ID' E JA ERA
fcm.getToken().then(token => {
firebase.database().ref('/Usuarios/' + id + '/tokens/' + this.device.uuid).set(token);
});
})
};
/*
NA HORA DE ENVIAR UM PUSH E USUARIO PRA USUARIO VOCÊ VAI PRECISAR FAZER VIA POST E VAI PRECISAR DE DUAS COISAS:
- O TOKEN DO APARELHO DO USUARIO.
- A CHAVE DE PERMISSÃO PARA SUA APLICAÇÃO USAR O GCM
A CHAVE VOCê PEGA ABRINDO O CONSOLE DO FIREBASE > ENTRA NO SEU PROJETO > VAI NAS CONFIGURAÇÕES NA ENGRENAGEM NO MENU LATERAL > CLOUD MESSAGING > VAI TER UMA CHAVE DA MENSAGEM (É UMA GRANDE BEM EM CIMA, DA UMAS 2 LINHAS A CHAVE);
AI NA PÁGINA QUE VOCÊ FOR MANDAR O PUSH FAZ ASSIM:
*/
import { Http, Headers, RequestOptions } from '@angular/http';
private chaveDoServidor: string = 'sua chave'
export class MinhaClasse {
constructor(public http: Http){}
//ENVIA O PUSH
enviaPush(tokenDoUsuario) {
let url = 'https://fcm.googleapis.com/fcm/send';
let body =
{
"notification": {
"title": "Meu Push",
"body": "Mensagem no corpo do push",
"sound": "default",
"click_action": "FCM_PLUGIN_ACTIVITY", // importante deixar
"icon": "fcm_push_icon"
},
"data": {
"dados": "Notificação" // AQUI PODE SER UM JSON COM DADOS QUE VOCÊ QUER PEGAR NO APARELHO DO USUARIO PRA TRATAR O PUSH, TIPO QUEM ENVIOU, DATA, ASSUNTO, ETC. NÃO É OBRIGATÓRIO
},
"to": tokenDoUsuario,
"priority": "high" // precisa ser high
};
let headers: Headers = new Headers({
'Content-Type': 'application/json',
'Authorization': this.chaveDoServidor
});
let options = new RequestOptions({ headers: headers });
this.http.post(url, body, options).subscribe(response => {
console.log('push enviado');
}, error => {
console.log('erro ao enviar push');
});
}
};
/*
SOBRE ATUALIZAR O APP:
SE EU FOSSE VOCê CRIAVA UM APP NOVO, COPIAVA OS ARQUIVOS DO SEU SRC PRO APP NOVO E INSTALAVA AS DEPENDENCIAS, MAIS FÁCIL E SE DER PAU NO NOVO O ANTIGO TA LA DE BOA.
MAS TEM MUITAS VANTAGENS DE MUDAR PRA VERSÃO MAIS RECENTE: ANGULAR 4, LAZY LOADING, VARIOS BUG FIXES.
LAZY LOADING É O PRINCIPAL, TINHA UM APP DE UM CLIENTE QUE DEMORAVA 3 SEGUNDOS PRA DISPARAR O DEVICE READY, AGORA DEMORA NO MAXIMO 0.7 SEGUNDO, AI SE PRECISAR DE AJUDA COM ISSO TE PASSO COMO FAZ
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment