Skip to content

Clone of instagram application using Android SDK, Firebase and Node.js

Notifications You must be signed in to change notification settings

pdrozz/InstagramClone

Repository files navigation

InstagramClone

Clone of instagram application using Android SDK, Firebase and Node.js

Only for studiyng

preview

Summary

  1. Design

  2. Objetivo

  3. Desafio

  4. Percurso/Trajetória

  5. Como usar o projeto

  6. How create a feed similar with instagram and facebook

Design

design

Objetivo

O objeto era claro e certo, criar um app com funcionalidades iguais a do instagram, como a visualização de um feed e a funcionalidade de seguir outros usuários, além de poder postar imagens, pesquisar outros usuários, visualizar posts recomendados ou os trends posts.

Desafio

Implementar as funcionalidades no menor tempo possível e com o melhor desempenho no app. Além de garantir uma melhor segurança na base de dados.

Percurso

Bom, no início do projeto o foco estava em entender como seriam os dados armazenados e interpretados pelos client. Optei por utilizar o sdk do firebase como o Realtime Database e Firebase Storage, (Node.js com o firebase functions mais em breve)

Enquanto desenvolvia as telas e os implementava os métodos para fazer os posts, sign up e follow, surgiu a principal questão, como faria o feed dos usuários? Considerando que estava apenas usando o Realtime Database e o Firebase Storage, podia fazer uma gambiarra e fazer o usuário salvar o post no nó feed de cada seguidor.

Então resolvi usar o Firebase Functions com o node.js para criar um trigger que ficava esperando uma mudança no nó post de cada usuário e quando essa mudança acontece ele recupera a lista de seguidores e então gera um feed personalizado para cada usuário, aproveitando que estava com a mão na massa aproveitei e criei um trigger que contava os post, seguidores e quantas pessoas o usuário segue para poder só recuperar o valor pelo client depois.

HowToUse

Windows:

  1. Clone the project

  2. Create a Firebase Project

  3. Sign up SHA1 app key in Firebase Project

  4. Place your firebase config file in app/

  5. Edit rules of Firebase Realtime Datebase:

#Desta forma o acesso a escrita só é permitida por usuário autenticados pelo FirebaseAuth com email e no locais permitidos
"rules": {
    ".read": true,
    ".write":false,
      
      "user": {
        ".indexOn":["nickname"],
      	"$uid": {
        ".write": "$uid === auth.uid"
        }
      },
        
      "posts":{
        "$uid":{
          "posts":{
            ".write":"$uid === auth.uid"
          },        
        }
      },
               
        
      "trends":{
        ".write":false
      },
        
      "seguindo":{
        "$uid":{
          "seguindo":{
          ".write":"$uid===auth.uid",
            }
        }
      },
    
      "seguidores":{
        "$id":{
          "seguidores":{
            "$uid": {
              ".write":"$uid===auth.uid"
            }
          }
        }
      }
  }
  1. Edit rules of Firebase Storage, ensure that only authenticated users have access to images
rules_version = '2'; //Current version
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}
  1. Create a firebase functions project, and deploy functions in file: index.js

FeedWithNodejs

How generate/build a feed similiar instagram and facebook with node.js, Firebase Functions and Firebase Realtime Database

Tutorial in english

//generate the Individual Feed
//trigger when new post is created
  exports.newposts = functions.database.ref('/posts/{userpid}/posts/{idpost}').onCreate((snap,context)=>{

    //get idUser and idPost
    let iddousuario=context.params.userpid;
    let idddopost=context.params.idpost;
    const globaltime=999999999999999;

    //get list of followers
    const seguidores = db.ref(`seguidores/${iddousuario}/seguidores/`).on('child_added',function(params) {
      var seguidor = params.val();
      var idseguidor=seguidor.id;
    
      var feedref=db.ref(`feed/${idseguidor}/feed`);
      
      //set reference of posts in feed of follower
      feedref.child(idddopost).set(
        {
          idpost:idddopost,
          idauthor:iddousuario,
          date:RetornaDataHoraAtual(),
          data:globaltime-Date.now()
      })
    });

  })

  function RetornaDataHoraAtual(){
    var dNow = new Date();
    var localdate = dNow.getFullYear() + '-' + (dNow.getMonth()+1) + '-' +  dNow.getDate() + ' ' + dNow.getHours() + ':' + dNow.getMinutes();
    return localdate;
  }  

About

Clone of instagram application using Android SDK, Firebase and Node.js

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published