Cloud Computing

7 nov, 2016

Novas possibilidades com o Parse Server

Publicidade

Parse Server é a versão Open Source da plataforma de criação de aplicativos do Facebook, o Parse. Neste artigo, serão detalhadas as opções para a migração do Parse bem como as principais diferenças entre o Parse e sua versão Open Source. Ao final do artigo será mostrado um exemplo de como efetuar se uma integração ao Stripe.

Como sabem, no início de 2016 o Facebook decidiu não mais prestar serviços de hospedagem de aplicativos e optou por criar uma versão Open Source de seu Backend as a Service. Tal decisão afetou milhares de desenvolvedores ao redor do mundo e o prazo para migração das aplicações está terminando. Se você ainda não definiu uma alternativa para o Parse, que encerrará os serviços em 28 de Janeiro de 2017, você não está sozinho. Felizmente, o Parse lançou uma versão Open Source que é o Parse Server. Escrito em Node.js, o Parse Server pode criar aplicativos de qualquer infraestrutura habilitada para Node.

Novas possibilidades com o Parse Server

Migrar sua aplicação pode ser um pouco mais trabalhoso que você imaginava, mas a boa notícia é que você pode fazer muito mais coisas com Parse Server que você podia com o Parse. Por exemplo, você pode hospedar o Parse Server em seu próprio servidor ou utilizar um serviço de hospedagem especializado. Você também pode desenvolver e testar suas aplicações localmente e ter certeza que tudo está funcionando corretamente antes de publicá-las. Estas características são apenas o topo do iceberg! Esta plataforma é poderosa e flexível e ainda oferece muitas outras vantagens em comparação ao Parse.com.

Principais Características do Parse Server

  • O Parse Server é uma plataforma independente do Facebook.
  • O Parse Server é um projeto Open Source.
  • O Parse Server utiliza a base de dados MongoDB.
  • Pré Requisitos para utilização são:
  • Node versão 4.3.
  • MongoDB versão 2.6X, 3.0X ou 3.2.6.

Migração Parse para o Parse Server

Existem três possibilidades para a migração de sua aplicação para o Parse Server.

Parse Server Hosting – As principais vantagens deste tipo de solução são: (1) Velocidade que pode ser implementada. (2) O baixo custo. (3) O fato de não haver downtime para o usuário final que utiliza os aplicativos. O principal serviço de hospedagem Parse Server é o Back4App.

Servidor Próprio – Neste caso, o usuário efetua a instalação do Parse Server em seu próprio servidor ou em provedores de infraestrutura, tais como, a Amazon AWS. A principal vantagem é o controle total sobre o servidor e a principal desvantagem é o maior custo.

Backend as a Service – A escolha desta opção implica na migração da aplicação do Parse para um novo serviço de backend as a service, tal como, Stamplay ou Backendless.

Parse Server – Principais características

Abaixo seguem as principais características do Parse Server.

Sem limites de consultas

O Parse tinha que estabelecer 1.000 objetos de consulta (query) máximos e os prazos para as centenas de milhares de aplicativos hospedados. Com o Parse Server, estes limites não existem mais. O usuário pode configurar a query máxima e o prazo máximo, funções na nuvem, e requests com Parse Server se você escolher, não há limites predefinidos.

Melhor gerenciamento da Base de Dados

Parse Server é muito mais flexível no que diz respeito a base de dados. Uma vez migrada a sua aplicação para o Parse Server, você terá:

  • Controle completo sobre qualquer base de dados que usar. Desenvolvedores já tem escrito diversas adaptações para o Parse Server que permitem controlar uma variedade de plataformas de base de dados e sistemas de armazenamento de dados.
  • A capacidade de adicionar índices.
  • Backup real e funcionalidades restauradas, ao invés do processo manual do Parse de exportar arquivos JSON.

Enquanto nem todos desenvolvedores precisam destas ferramentas, muitos desenvolvedores apresentam interesse em ter mais controle sobre sua base de dados.

Live Queries (Consultas instantâneas)

O Parse Server suporta Live Queries e gera feeds contínuos de alterações de objetos, como mensagens de jogos em tempo real e elimina a necessidade de executar consultas adicionais cada vez que você precisar de novos dados para estes tipos de aplicações. Você pode usar consultas momentâneas Parse no Parse Server usando callsubscribe() instead of find(), que informa ao servidor para fazer atualizações de objetos em tempo real.

Adições recentes ao Parse Server

É importante ressaltar que o Parse Server não é uma cópia exata do Parse. As principais funcionalidades estão contempladas no Parse Server, mas existem diversas funcionalidades que não estão disponíveis. Entretanto, este não é um grande motivo de preocupação, visto que que o Parse Server é um projeto Open Source e existe uma comunidade de cerca de 600 mil desenvolvedores que pode aprimorar o produto e efetuar melhorias contínuas na ferramenta.

Parse Dashboard

O Parse lançou o Painel de controle alguns meses atrás para auxiliar o gerenciamento das aplicações que utilizam a plataforma. É fácil de instalar, configurar e atualizar.

Push Notifications

O Parse adicionou recentemente esta funcionalidade em sua versão Open Source. Desta forma, você pode direcionar canais e instalações específicas e Push Notifications para os usuários iOS e Android. E com o novo adaptador push, você pode enviar notificações via qualquer serviço móvel de notificações push que fornece uma API.

Pointer Permissions

As versões mais recentes do Parse Server e Parse Dashboard também incluem Pointer Permissions, que oferecem uma nova maneira de proteger todos os objetos em uma classe simultaneamente. Pointer Permissions obtém facilmente, de forma segura, mensagens e perfis sem qualquer novo código do cliente ou servidor.

Funcionalidade de configuração

Finalmente, você pode agora usar a poderosa funcionalidade do Parse Config para configurar sua aplicação no Parse Server.

Acessando Analytics para seu Parse Server App

Uma das principais limitações do Parse Server é a falta de um painel de gerenciamento dos aplicativos. Uma alternativa para esta situação é instalação do Google Analytics, Mixpanel ou utilizar um serviço de hospedagem tal como o Back4App.

Exemplo: Integração com o Stripe

No exemplo abaixo será detalhado como criar um aplicativo Android e efetuar uma integração com um meio de pagamento. Será utilizado o Stripe e ao final do tutorial será possível visualizar o botão que permite a compra com apenas um clique.

Para efetuar o download do projeto, por favor, acesse: https://github.com/dominwong4/Back4app-Stripe-Android-Tutorial

Passo 1 – Criar o Dashboard

Acesso o Parse Dashboard e siga as instruções abaixo:

Crie a Classe: Item

Insira as seguintes colunas:

ItemName
price
quantityAvailable
insert a sample item record
ItemName: test
price: 10
quantityAvailable: 10

1

Crie a classe: Order

Insira as seguintes colunas:

name
email
address
zip
city_state
item
size
fulfilled : Boolean
charged : Boolean
stripePaymentId

Passo 2 – Chave do Stripe

Crie um login e senha no Stripe conforme especificado abaixo:

https://manage.stripe.com/account/apikeys

Caso não funcione, siga os passos a seguir:

  • Account Settings à API Key

Copie:

test publishable key (for Android Client)
pk_test_1IqGGvSacpQ8lpIBxuVvI5rP
test secret key (for CloudCode Server)
sk_test_U4ztvrYPxe7Ph3w0ii155rnw

<img class="alignnone size-full wp-image-107346" src="https://static.imasters.com.br/wp-content/uploads/2016/10/2-1.png" alt="2" width="252" height="300" />

Passo 3 – Crie um Cloud Code para o pagamento via Stripe

https://github.com/dominwong4/Back4app-Stripe-Android-Tutorial/blob/master/CloudCode/main.js

main.js (replace Stripe.initialize to your secret key)

Passo 4 –  Crie um Android Client Appication

Adicione o pacote Parse e Stripe ao seu projeto. Vá para build.gradle e adicione o seguinte código:

compile ‘com.stripe:stripe-android:+’
compile ‘com.parse:parse-android:1.13.0’

E então clique em “sync now” para sincronizar. Agora vá para AndroidManifest.xml

add <uses-permission android:name=”android.permission.INTERNET”/>
if not working , go to https://github.com/stripe/stripe-android to download their package.

Para implementar a barra de pagamento, é necessário o acompanhamento das funções obrigatórias.

Veja o código inteiro: https://github.com/dominwong4/Back4app-Stripe-Android-Tutorial/blob/master/app/src/main/java/dominwong4/scm/back4app_stripe_android_tutorial/MainActivity.java

Acima de onCreate()

public static final String PUBLISHABLE_KEY = "pk_test_1IqGGvSacpQ8lpIBxuVvI5rP";
public static final String APPLICATION_ID = "RKNck9SdN6sqcznBvy5lqnN2ln1FrrSabNcq8YEK";
public static final String CLIENT_KEY = "zWtkaYFS0Ia91jKkgmIHJql30cARcrDmKUGAXLTY";
public static final String BACK4PAPP_API = "https://parseapi.back4app.com/";

For your application initialize

Dentro de onCreate()

Parse.initialize(new Parse.Configuration.Builder(this)
.applicationId(APPLICATION_ID)
.clientKey(CLIENT_KEY)
.server(BACK4PAPP_API).build());

And A Dummy Card
//Note that you need to create a Credit card form for user so that they can use their card, the Card construction is following
card = new Card(
        "4242424242424242", //card number
        12, //expMonth
        2016,//expYear
        "123"//cvc
);

Para a função principal de compras:

private void buy(){
    boolean validation = card.validateCard();
    if(validation){
        startProgress("Validating Credit Card");
        new Stripe().createToken(
                card,
                PUBLISHABLE_KEY,
                new TokenCallback() {
                    @Override
                    public void onError(Exception error) {
                        Log.d("Stripe",error.toString());
                    }

                    @Override
                    public void onSuccess(Token token) {
                        finishProgress();
                        charge(token);
                    }
                });
    } else if (!card.validateNumber()) {
        Log.d("Stripe","The card number that you entered is invalid");
    } else if (!card.validateExpiryDate()) {
        Log.d("Stripe","The expiration date that you entered is invalid");
    } else if (!card.validateCVC()) {
        Log.d("Stripe","The CVC code that you entered is invalid");
    } else {
        Log.d("Stripe","The card details that you entered are invalid");
    }
}

private void charge(Token cardToken){
    HashMap<String, Object> params = new HashMap<String, Object>();
    params.put("itemName", "test"); //This part you need to pass your item detail, implement yourself
    params.put("cardToken", cardToken.getId());
    params.put("name","Dominic Wong");
    params.put("email","dominwong4@gmail.com");
    params.put("address","HIHI");
    params.put("zip","99999");
    params.put("city_state","CA");
    startProgress("Purchasing Item");
    ParseCloud.callFunctionInBackground("purchaseItem", params, new FunctionCallback<Object>() {
        public void done(Object response, ParseException e) {
            finishProgress();
            if (e == null) {
                Log.d("Cloud Response", "There were no exceptions! " + response.toString());
                Toast.makeText(getApplicationContext(),
                        "Item Purchased Successfully ",
                        Toast.LENGTH_LONG).show();
            } else {
                Log.d("Cloud Response", "Exception: " + e);
                Toast.makeText(getApplicationContext(),
                        e.getMessage().toString(),
                        Toast.LENGTH_LONG).show();
            }
        }
    });
}

Passo 5: Teste

Se tudo funcionar bem poucos ajustes serão necessários.

1. O armazenamento está diminuído

3

A requisição pode ser encontrada em Class:Order

O carregamento -> true and stripePaymentId != undefined at Class:Order

4

O painel de controle do Stripe tem registro de transações

5