android – Como recuperar em java o retorno de uma função java script do firebase functions

Estou com dificuldade em recuperar o retorno de uma função, a função faz uma solicitação de pagamento, a solicitação funciona perfeitamente e consigo acompanhar o resultado na dashboard da empresa responsável, mas preciso capturar e tratar o retorno da função do firebase functions para saber se a transação foi concluída com sucesso para poder prosseguir dentro do aplicativo.

Preciso alterar algo no código hospedado no cloud functions? Como receber e tratar o retorno da função addMessage(java)

Abaixo a função que envia os dados e recebe o retorno.

private Task<String> addMessage(DadosPagamento dados) {

        Map<String, Object> data = new HashMap<>();
        data.put("amount", dados.getAmount());
        data.put("card_number", dados.getNumCard());
        data.put("card_holder_name", dados.getNomeCard());
        data.put("card_cvv", dados.getCvvCard());
        data.put("card_expiration_date", dados.getDataCard());

        data.put("client_id", dados.getIdCliente());
        data.put("req_id", dados.getReqId());
        data.put("client_name", dados.getClienteNome());
        data.put("client_email", dados.getClienteEmail());

        data.put("client_cpf", dados.getClienteCpf());
        data.put("client_cel", dados.getClienteTelefone());
        data.put("client_birthday", dados.getClienteAniversario());

        data.put("client_cidade", dados.getCidade());
        data.put("client_estado", dados.getEstado());
        data.put("client_bairro", dados.getBairro());
        data.put("client_cep", dados.getCep());
        data.put("client_rua", dados.getRua());
        data.put("client_numero", dados.getNumero());

        data.put("push", true);

        return mFunctions
                .getHttpsCallable("addMessage")
                .call(data)
                .continueWith(new Continuation<HttpsCallableResult, String>() {
                    @Override
                    public String then(@NonNull Task<HttpsCallableResult> task) throws Exception {
                        // This continuation runs on either success or failure, but if the task
                        // has failed then getResult() will throw an Exception which will be
                        // propagated down.
                        String result = (String) task.getResult().getData();
                        return result;
                    }
                });
    }

Abaixo a função que está hospedada no Cloud functions

/* eslint-disable promise/catch-or-return */

const functions = require('firebase-functions');

exports.addMessage = functions.https.onCall((data, context) => {
  const pagarme = require('pagarme')

  const amount = data.amount
  const card_number = data.card_number
  const card_cvv = data.card_cvv
  const card_expiration_date = data.card_expiration_date
  const card_holder_name = data.card_holder_name
  

  const client_id = data.client_id
  const client_name = data.client_name
  const client_email = data.client_email
  const client_cpf = data.client_cpf
  const client_cel = data.client_cel
  const client_birthday = data.client_birthday

  const client_estado = data.client_estado
  const client_cidade = data.client_cidade
  const client_bairro = data.client_bairro
  const client_rua = data.client_rua
  const client_numero = data.client_numero
  const client_cep = data.client_cep

  const req_id = data.req_id

pagarme.client.connect({ api_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx' })
  .then(client => client.transactions.create({
    "amount": amount,
    "card_number": card_number,
    "card_cvv": card_cvv,
    "card_expiration_date": card_expiration_date,
    "card_holder_name": card_holder_name,
    "customer": {
      "external_id": client_id,
      "name": client_name,
      "type": "individual",
      "country": "br",
      "email": client_email,
      "documents": (
        {
          "type": "cpf",
          "number": client_cpf
        }
      ),
      "phone_numbers": (client_cel),
      "birthday": client_birthday
    },
    "billing": {
      "name": client_name,
      "address": {
        "country": "br",
        "state": client_estado,
        "city": client_cidade,
        "neighborhood": client_bairro,
        "street": client_rua,
        "street_number": client_numero,
        "zipcode": client_cep
      }
    },
    "items": (
      {
        "id": req_id,
        "title": "Req",
        "unit_price": amount,
        "quantity": 1,
        "tangible": false
      },
    )
  }))
  .then(transaction => console.log(transaction))
  res.end()

  });
  

javascript – How to manage order when pushing data to state and firebase at checkbox onChange in React

Hi I’m new to react and struggle with how to manage the order / process of how to setState and when to push data to the database.

I have an event list and want allow the user to save events the user likes by checking a checkbox

So I added a checkbox

<input type="checkbox" onChange={handleChange} data-id={subeventNode.node.id} checked={checked(subeventNode.node.id)} />

Within handleChange I update the state

  const handleChange = (e) => {
    setChecked({...checked, (e.target.getAttribute('data-id')) : e.target.checked });
  }

In addition I set the state if the user object has data from firestore like this

  useEffect(() => {
    if(user != null && user.events != null) {
      setChecked(user.events);
    }        
  }, (user))

Not sure if that’s a good practise with useEffect? But it seems to set the checkboxes as defined in the database when I initially load the site

My problem now is where to push data to firestore. I tested it in handleChange but it pushed the previous version of checked.

  const handleChange = (e) => {
    setChecked({...checked, (e.target.getAttribute('data-id')) : e.target.checked });

    //AWA
    //Where do it push it to the database? here? 
    firebase.updateProfile({uid: user.uid, events: checked})
    .catch(error => {
      console.log(error)
    })
  }

I could try something with await or then maybe, but to me it feels like I should watch out for some best practise now.

android – Firebase RecyclerView com Section

Bom, eu estou a dias tentando criar um recyclerView com seções usando o firebase mas nada funciona… Eu estou tentando fazer algo como, por exemplo, em Janeiro fica alguns itens, em Fevereiro outros e por ai vai. Eu consegui usar o firebase pra fazer o recyclerView e tudo mais, mas não faço ideia de como separar os dados daquela forma que expliquei… Aqui meu código:

recyclerView = view.findViewById(R.id.recyclerView);

FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();

//Query
Query query = firebaseFirestore.collection("HistoricoVendas");
//RecyclerOptions
FirestoreRecyclerOptions<Vendas> options = new FirestoreRecyclerOptions.Builder<Vendas>().setQuery(query, Vendas.class).build();
//Adapter
 adapter = new FirestoreRecyclerAdapter<Vendas, VendasViewHolder>(options) {
    @NonNull
    @Override
    public VendasViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view1 = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_lista, parent, false);
         return new VendasViewHolder(view1);
    }

    @Override
    protected void onBindViewHolder(@NonNull VendasViewHolder holder, int position, @NonNull Vendas model) {

        holder.comprador.setText(model.getComprador());
        holder.equipamentoVendido.setText(model.getEquipamentoVendido());
        holder.valorTotal.setText(model.getValorTotal());
        holder.dataVenda.setText(model.getDataVenda());
        holder.mesDaVenda.setText(model.getMesVenda());
    }
};

 recyclerView.setHasFixedSize(true);
 recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
 recyclerView.setAdapter(adapter);


return view;

}
0

Bom, eu estou a dias tentando criar um recyclerView com seções usando o firebase mas nada funciona… Eu estou tentando fazer algo como, por exemplo, em Janeiro fica alguns itens, em Fevereiro outros e por ai vai. Eu consegui usar o firebase pra fazer o recyclerView e tudo mais, mas não faço ideia de como separar os dados daquela forma que expliquei… Aqui meu código:

recyclerView = view.findViewById(R.id.recyclerView);

FirebaseFirestore firebaseFirestore = FirebaseFirestore.getInstance();

//Query
Query query = firebaseFirestore.collection("HistoricoVendas");
//RecyclerOptions
FirestoreRecyclerOptions<Vendas> options = new FirestoreRecyclerOptions.Builder<Vendas>().setQuery(query, Vendas.class).build();
//Adapter
 adapter = new FirestoreRecyclerAdapter<Vendas, VendasViewHolder>(options) {
    @NonNull
    @Override
    public VendasViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view1 = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_lista, parent, false);
         return new VendasViewHolder(view1);
    }

    @Override
    protected void onBindViewHolder(@NonNull VendasViewHolder holder, int position, @NonNull Vendas model) {

        holder.comprador.setText(model.getComprador());
        holder.equipamentoVendido.setText(model.getEquipamentoVendido());
        holder.valorTotal.setText(model.getValorTotal());
        holder.dataVenda.setText(model.getDataVenda());
        holder.mesDaVenda.setText(model.getMesVenda());
    }
};

 recyclerView.setHasFixedSize(true);
 recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
 recyclerView.setAdapter(adapter);


return view;

}

vue.js – Leer datos de Firebase y convertirlos a Markdown

antes que nada muchas gracias desde ya por sus respuestas.

Tengo el siguiente problema:

He guardardo texto en Firestore utilizando la sintaxis de Markdown (Es un pequeño blog)y necesito recuperarlos con Vuejs y mostrarlos mostrando los estilos que me proporciona Markdown, será eso posible?

De antemano, mil gracias a todos

dnd 5e – How can I design a magical weapon that grants an advantage against fire-base creatures without using water and choking effects?

The party I am DM’ing is going for an adventure to the Elemental Plane of Fire. I want to design a magical weapon that can grant an advantage against fire-based creatures. I see that Fire Elementals have Water Susceptibility (Cold Damage) but I have already house-ruled that elemental planes can not include magical effects of elements from other elemental planes, but just the spells that have elements of the current plane can be cast (as the plane purely consists of element of itself). For example, in the Elemental Plane of Air, not only Earth-based spells but all the spells are impeded, except air-based ones.

After I realized that I can’t use a magical weapon that has cold damage due to my house-rule, I wanted to give the weapon a “heavy smoke” effect to choke the fire, as I thought that fire can not live without oxygen. But this option conflicts with my house-rule, also I saw that the fire-based creatures any other fire source in the Elemental Plane of Fire don’t need air to live.

Now I have no idea how can I design a magical weapon that gives an advantage against fire-based creatures without cold damage and choking the fire via leaving without oxygen is not an option. I can not cancel my house-ruling because of the sake of my setting. I am open to any house ruling ideas beside the official ruling.

TLDR: as in title, how can I design a magical weapon that grants an advantage against fire-base creatures without using water and choking effects?

If the question shows up to be opinion-based, please accept my apologies.

firestore – Deletar item de lista pelo flutter e firebase

Tenho uma lista de categorias e preciso deletar itens dessa lista.

Essa é a categoryTile.dart

import 'package:flutter/material.dart';
import 'package:note_study/model/category/category_manager.dart';
import 'package:note_study/model/category/category_model.dart';

class CategoryListTile extends StatefulWidget {
  CategoryListTile(this.categoryModel);
  final CategoryModel categoryModel;

  @override
  _CategoryListTileState createState() => _CategoryListTileState();
}

class _CategoryListTileState extends State<CategoryListTile> {
  CategoryManager categoryManager;
  @override
  Widget build(BuildContext context) {
    return InkWell(
      onTap: () {
        categoryManager.deleteDataCategory();
      },
      child: Expanded(
        child: Container(
          decoration: BoxDecoration(
              borderRadius: BorderRadius.circular(16),
              color: Theme.of(context).cursorColor),
          height: 50,
          margin: const EdgeInsets.symmetric(vertical: 8, horizontal: 8),
          child: Center(
            child: Text(
              widget.categoryModel.name,
              style: TextStyle(
                  fontSize: 15,
                  fontWeight: FontWeight.bold,
                  color: Colors.white),
            ),
          ),
        ),
      ),
    );
  }
}

Essa é a categoryScreen.dart

import 'package:flutter/material.dart';
import 'package:note_study/model/category/category_manager.dart';
import 'package:note_study/screen/category/components/category_list_tile.dart';
import 'package:provider/provider.dart';

class CategoryScreen extends StatefulWidget {
  @override
  _CategoryScreenState createState() => _CategoryScreenState();
}

class _CategoryScreenState extends State<CategoryScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        elevation: 0,
      ),
      body: Consumer<CategoryManager>(
        builder: (_, categoryManager, __) {
          return GridView.builder(
            gridDelegate:
                SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
            itemCount: categoryManager.allCategory.length,
            itemBuilder: (context, index) {
              return CategoryListTile(categoryManager.allCategory(index));
            },
          );
        },
      ),
    );
  }
}

Essa é a categoryManager.dart

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';
import 'package:note_study/model/category/category_model.dart';

class CategoryManager extends ChangeNotifier {
  CategoryManager() {
    loadAllCategory();
  }

  final Firestore firestore = Firestore.instance;
  final FirebaseAuth fireAuth = FirebaseAuth.instance;

  CategoryModel categoryModel;

  Future<void> saveDataCategory(
      {CategoryModel categoryModel,
      Function onSuccess,
      Function onFail}) async {
    try {
      this.categoryModel = categoryModel;
      await categoryModel.saveData();
      onSuccess();
    } on PlatformException catch (e) {
      onFail(print(e));
    }

    notifyListeners();
  }

  Future<void> deleteDataCategory() async {
    categoryModel.deleteData();

    notifyListeners();
  }

  List<CategoryModel> allCategory = ();

  Future<void> loadAllCategory({FirebaseUser fireUser}) async {
    final FirebaseUser currentUser = fireUser ?? await fireAuth.currentUser();
    firestore
        .collection('users')
        .document(currentUser.uid)
        .collection('category')
        .snapshots()
        .listen(
      (snapshot) {
        allCategory = snapshot.documents
            .map((d) => CategoryModel.fromDocument(d))
            .toList();
        notifyListeners();
      },
    );
    notifyListeners();
  }
}

E essa é a categoryModel.dart

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:note_study/model/user/user_manager.dart';

class CategoryModel {
  CategoryModel({
    this.id,
    this.name,
  });
  UserManager userManager = UserManager();
  CategoryModel.fromDocument(DocumentSnapshot categorySnap) {
    id = categorySnap.documentID;
    name = categorySnap.data('name') as String;
  }
  String id;
  String name;
  //Pegando usuario logado
  String get idUSer => userManager.userModel.id;
  DocumentReference get firestoreRef =>
      Firestore.instance.document('users/$idUSer');

  Future<void> saveData() async {
    await firestoreRef.collection('category').add(toMap());
  }

  Future<void> deleteData() async {
    await firestoreRef.collection('category').document(id).delete();
  }

  Map<String, dynamic> toMap() {
    return {
      'name': name,
    };
  }
}

Preciso recuperar o index ou algo do tipo para poder deletar o documento correto.

Como faço?

Problema com RadioGroup salvar valor no firebase Android

Olá, no codigo o usuario pode selecionar homem ou mulher, mas não estou conseguindo passar para string o valor. para posteriormente salvar no firebase. alguem pode me ajudar? obrigado

problema está aqui

  public void validarCadastroUsuario(View view){

        //Recuperar textos dos campos
        String textoNome  = campoNome.getText().toString();
        String textoEmail = campoEmail.getText().toString();
        String textoSenha = campoSenha.getText().toString();
        String  sexo = indiceSelecionado.getText().toString();

codigo completo ->

public class CadastroActivity extends AppCompatActivity {

    private TextInputEditText campoNome, campoEmail, campoSenha;
    private FirebaseAuth autenticacao;
    private RadioGroup value;
    private RadioButton Homem;
    private RadioButton Mulher;
    private String indiceSelecionado;
    private String sexo;
    @SuppressLint("WrongViewCast")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cadastro);

        campoNome  = findViewById(R.id.editNome);
        campoEmail = findViewById(R.id.editEmail);
        campoSenha = findViewById(R.id.editSenha);
        value = findViewById(R.id.radiogroupvalue);
        Homem = findViewById(R.id.Homem);
        Mulher = findViewById(R.id.Mulher);
    }

    public void cadastrarUsuario(final Usuario usuario){

        autenticacao = ConfiguracaoFirebase.getFirebaseAutenticacao();
        autenticacao.createUserWithEmailAndPassword(
             usuario.getEmail(), usuario.getSenha()
        ).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {

                if ( task.isSuccessful() ){

                    Toast.makeText(CadastroActivity.this,
                            "Sucesso ao cadastrar usuário!",
                            Toast.LENGTH_SHORT).show();
                    UsuarioFirebase.atualizarNomeUsuario( usuario.getNome() );
                    finish();

                    try {

                        String identificadorUsuario = Base64Custom.codificarBase64( usuario.getEmail() );
                        usuario.setId( identificadorUsuario );
                        usuario.salvar();

                    }catch (Exception e){
                        e.printStackTrace();
                    }

                }else {

                    String excecao = "";
                    try {
                        throw task.getException();
                    }catch ( FirebaseAuthWeakPasswordException e){
                        excecao = "Digite uma senha mais forte!";
                    }catch ( FirebaseAuthInvalidCredentialsException e){
                        excecao= "Por favor, digite um e-mail válido";
                    }catch ( FirebaseAuthUserCollisionException e){
                        excecao = "Este conta já foi cadastrada";
                    }catch (Exception e){
                        excecao = "Erro ao cadastrar usuário: "  + e.getMessage();
                        e.printStackTrace();
                    }

                    Toast.makeText(CadastroActivity.this,
                            excecao,
                            Toast.LENGTH_SHORT).show();

                }

            }
        });
        //Recupera o valor do indiceSelecionado
        indiceSelecionado = ("chave_radio");
        //Executa a condição abaixo para ver qual o ultimo ID que fora salvo, ou seja
        //qual o ultimo radioButton foi marcado
        if(indiceSelecionado == String.valueOf(R.id.Homem)){
            value.check(R.id.Homem);
        }else if (indiceSelecionado == String.valueOf(R.id.Mulher)){
            value.check(R.id.Mulher);
        }
    }

    public void validarCadastroUsuario(View view){

        //Recuperar textos dos campos
        String textoNome  = campoNome.getText().toString();
        String textoEmail = campoEmail.getText().toString();
        String textoSenha = campoSenha.getText().toString();
        String  sexo = indiceSelecionado.getText().toString();

        if( !textoNome.isEmpty() ){//verifica nome
            if( !textoEmail.isEmpty() ){//verifica e-mail
                if ( !textoSenha.isEmpty() ){

                    Usuario usuario = new Usuario();
                    usuario.setNome( textoNome );
                    usuario.setEmail( textoEmail );
                    usuario.setSenha( textoSenha );
                    usuario.setSexo(sexo);

                    cadastrarUsuario( usuario );

                }else {
                    Toast.makeText(CadastroActivity.this,
                            "Preencha a senha!",
                            Toast.LENGTH_SHORT).show();
                }
            }else {
                Toast.makeText(CadastroActivity.this,
                        "Preencha o email!",
                        Toast.LENGTH_SHORT).show();
            }
        }else {
            Toast.makeText(CadastroActivity.this,
                    "Preencha o nome!",
                    Toast.LENGTH_SHORT).show();
        }

    }


}

firebase auth – Como hago para estar logeado cada vez que entre un usuario a la aplicacion – React Native

Usando el siguiente codigo

constructor() {
  super();
  this.state = { 
    email: '', 
    password: '',
  }
}

updateInputVal = (val, prop) => {
  const state = this.state;
  state(prop) = val;
  this.setState(state);
}

userLogin = () => {
  if(this.state.email === '' && this.state.password === '') {
    Alert.alert('Enter details to signin!')
  } else {
    
    firebase
    .auth()
    .signInWithEmailAndPassword(this.state.email, this.state.password)
    .then((res) => {
      console.log(res)
      console.log('User logged-in successfully!')
      this.setState({
        email: '', 
        password: ''
      })
      this.props.navigation.navigate('Home')
    })
    .catch(error => this.setState({ errorMessage: Alert.alert('Denied')    }))

    

Como puedo hacer para que el usuario ya registrado este logeado inmediatamente que entre a la aplicacion, tengo entendido que es con .setPersistance o .setAuthchange usando firebase pero no me queda muy claro como implementarlo en este codigo.

Gracias!

firebase – Pegar o id dentro do _loadAllCategory em flutter

Possuo essa classe que em teoria, teria que me trazer todos os documentos dentro desse id no firebase.

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart';
import 'package:note_study/model/category/category_model.dart';
import 'package:note_study/model/user/user_manager.dart';

class CategoryManager extends ChangeNotifier {
  CategoryManager() {
    _loadAllCategory();
  }

  final Firestore firestore = Firestore.instance;
  final FirebaseAuth fireAuth = FirebaseAuth.instance;

  CategoryModel categoryModel;
  UserManager userManager = UserManager();
  String get idUser => userManager.userModel.id;

  Future<void> saveDataCategory(
      {CategoryModel categoryModel,
      Function onSuccess,
      Function onFail}) async {
    try {
      this.categoryModel = categoryModel;
      await categoryModel.saveData();
      onSuccess();
    } on PlatformException catch (e) {
      onFail(print(e));
    }

    notifyListeners();
  }

  List<CategoryModel> allCategory = ();

  Future<void> _loadAllCategory() async {
    final QuerySnapshot snapCategory = await firestore
        .collection('users')
        .document(idUser)
        .collection('category')
        .getDocuments();
    allCategory = snapCategory.documents
        .map((d) => CategoryModel.fromDocument(d))
        .toList();
  }
}

Através desse get

  String get idUser => userManager.userModel.id;

Eu consigo pego o id, quando eu dou um print ele esta la. mas quando tento colocar no document(idUser) para pegar os documentos no firebase, minha lista fica em branco, e no meu debugConsole é mostrado que estou tentando chamar um id nulo, mas como expliquei, ele não esta nulo.
Como posso resolver?

arduino – Como fazer o CRUD no Firebase Cloud Firestore com ESP32

Obrigado por contribuir com o Stack Overflow em Português!

  • Certifique-se de responder à pergunta. Entre em detalhes sobre a sua solução e compartilhe o que você descobriu.

Mas evite

  • Pedir esclarecimentos ou detalhes sobre outras respostas.
  • Fazer afirmações baseadas apenas na sua opinião; aponte referências ou experiências anteriores.

Para aprender mais, veja nossas dicas sobre como escrever boas respostas.