Versuchen Sie, Firebase Cloud-Funktionen unter Android (Java) zu verwenden.

Ich bin neu in Android Ich habe versucht, Hello World mit httpsCallable von Firebase Cloud-Funktionen auszuführen, daher werde ich das Verfahren zusammenfassen.

1. Erstellen Sie ein Android-Projekt

Angenommen, das Android SDK selbst ist bereits installiert, starten Sie zuerst Android Studio und erstellen Sie ein Projekt.

Wählen Sie "Datei" → "Neu" → "Neues Projekt erstellen"

Wählen Sie "Leere Aktivität" als Vorlage (wenn Sie möchten) und geben Sie "Name", "Paketname" und "Speicherort speichern" ein. Sprache wählt Java aus.

2. Vorbereiten des Firebase SDK

Öffnen Sie das Firebase-Projekt (erstellen Sie es, falls Sie es noch nicht getan haben) in Ihrem Browser und fügen Sie die Android-App hinzu. Test_Project_–_設定_–_Firebase_console.png Von hier aus wird der Tutorial-Bildschirm angezeigt, sodass wir ihn so vorstellen, wie er ist. Geben Sie auf der ersten Seite zuerst den zuvor in Android Studio festgelegten "Paketnamen" ein und geben Sie alle optionalen Elemente ein. Laden Sie auf der zweiten Seite "google-services.json" herunter und gehen Sie direkt in das Verzeichnis "/ app" Ihres Android-Projekts. Bearbeiten Sie auf der dritten Seite zuerst die Build-Einstellungen von build.gradle im Projektstamm.

build.gradle


// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        google()
        jcenter()
        
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.5.3'
        
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        classpath 'com.google.gms:google-services:4.3.3'
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Bestätigen Sie, dass an zwei Stellen "google ()" vorhanden ist, und es wird angewiesen, das abhängige Modul ("com.google.gms: google-services") hinzuzufügen.

Bearbeiten Sie "build.gradle" für jede App.

app/build.gradle


apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "com.example.firebaseexample"
        minSdkVersion 16
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    //implementation 'com.google.firebase:firebase-core:17.2.2' //Hinzufügen bei Verwendung von Analytics usw.
    implementation 'com.google.firebase:firebase-functions:19.0.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

Fügen Sie in der zweiten Zeile das Plugin "Apply anwenden:" com.google.gms.google-services "hinzu und fügen Sie die erforderlichen abhängigen Pakete hinzu. Die Liste der Pakete lautet hier. Da wir diesmal nur Cloud-Funktionen verwenden, fügen wir nur "com.google.firebase: firebase-Funktionen" hinzu. In der obigen Quelle wurde jede Version auf die neueste Version geändert. Für die Firebase-Unterstützung sollte minSdkVersion 16 oder höher sein. Mit anderen Worten, Android 4.1 ist die Untergrenze für die Verwendung des aktuellen Firebase SDK.

Es scheint, dass diese Schritte durch Öffnen des Assistentenfensters unter "Tools" → "Firebase" von Android Studio ausgeführt werden können, aber das ist alles. Es fühlte sich also nicht so bequem an ...

Wenn danach die Synchronisierung mit "Datei" → "Projekt mit Gradle-Dateien synchronisieren" erfolgreich ist, ist die SDK-Installation abgeschlossen.

3. App-Bildschirm erstellen

Screenshot (Jan 31, 2020 7_47_28 PM).png

Erstellen Sie auf diese Weise einen Bildschirm, der den eingegebenen Text an Cloud-Funktionen sendet und den Rückgabewert anzeigt.

app/src/main/res/layout/activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <RelativeLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:gravity="center"
            android:layout_centerVertical="true">
            <TextView
                android:id="@+id/title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/title" />
            <EditText
                android:id="@+id/name"
                android:layout_width="200dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="32dp"
                android:singleLine="true"/>
            <Button
                android:id="@+id/ok_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="32dp"
                android:text="@string/ok_button"
                android:textColor="@color/colorWhite"
                android:background="@color/colorAccent"
                />
            <TextView
                android:id="@+id/result"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="32dp"
                android:text=""/>
        </LinearLayout>
    </RelativeLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

Bearbeiten Sie die auf dem Bildschirm verwendeten Ressourcen.

app/src/main/res/values/colors.xml


<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#051E34</color>
    <color name="colorPrimaryDark">#051E34</color>
    <color name="colorAccent">#1A73E8</color>
    <color name="colorWhite">#FFFFFF</color>
</resources>

app/src/main/res/values/strings.xml


<resources>
    <string name="app_name">FirebaseExample</string>
    <string name="title">Enter your name!</string>
    <string name="ok_button">OK</string>
</resources>

4. Implementieren Sie die Verarbeitung

Fügen Sie dem Manifest zunächst die Berechtigung zum Internetzugang (vor "") hinzu. Es scheint zu funktionieren, ohne dies hinzuzufügen, aber nur für den Fall.

app/src/main/AndroidManifest.xml (Teil)


<uses-permission android:name="android.permission.INTERNET" />

Hinzufügen der Verarbeitung zu MainActivity.

java:app/src/main/java/.../MainActivity


package com.example.firebaseexample;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.google.android.gms.tasks.Continuation;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.functions.FirebaseFunctions;
import com.google.firebase.functions.FirebaseFunctionsException;
import com.google.firebase.functions.HttpsCallableResult;

import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {
    private FirebaseFunctions mFunctions;
    private EditText nameInput;
    private TextView resultTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Holen Sie sich den Cloud Functions Client
        mFunctions = FirebaseFunctions.getInstance();

        //Holen Sie sich Bildschirmelemente
        resultTextView = findViewById(R.id.result);
        nameInput = findViewById(R.id.name);

        //Set Button Click Event Listener
        final Button okButton = findViewById(R.id.ok_button);
        okButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                final String name = nameInput.getText().toString();
                helloWorld(name);
                hideInput(view);
            }
        });

        //Verarbeitung zum Schließen der Tastatur beim Tippen auf den Bildschirm
        final View container = findViewById(R.id.container);
        container.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                hideInput(view);
            }
        });
    }

    /**
     *Tastatur schließen
     * @param view Klickte Ansicht
     */
    private void hideInput(@NonNull View view) {
        InputMethodManager inputMethodManager = (InputMethodManager)
                view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
        if (inputMethodManager != null) {
            inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(),0);
        }
    }

    /**
     *Schlagen Sie eine Cloud-Funktionen-Funktion
     * @Param Name Name
     * @return task
     */
    private Task helloWorld(String name) {
        //Erstellen Sie Daten zum Senden
        Map<String, Object> data = new HashMap<>();
        data.put("name", name);
        
        //Rufen Sie die helloWorld-Funktion auf
        return mFunctions
                .getHttpsCallable("helloWorld")
                .call(data)
                .continueWith(new Continuation<HttpsCallableResult, String>() {
                    @Override
                    public String then(@NonNull Task<HttpsCallableResult> task) {
                        String result = (String) task.getResult().getData();
                        return result;
                    }
                })
                .addOnCompleteListener(new OnCompleteListener<String>() {
                    @Override
                    public void onComplete(@NonNull Task<String> task) {
                        if (!task.isSuccessful()) { //Bei Fehler
                            Exception e = task.getException();
                            if (e instanceof FirebaseFunctionsException) {
                                //Geben Sie den Inhalt des Fehlers in das Protokoll aus
                                FirebaseFunctionsException ffe = (FirebaseFunctionsException) e;
                                FirebaseFunctionsException.Code code = ffe.getCode();
                                Object details = ffe.getDetails();
                                Log.e("functions error", code.toString());
                                Log.e("functions error", String.valueOf(details));
                            }
                        } else {
                            String result = task.getResult();
                            if (result != null) {
                                resultTextView.setText(result); //Stellen Sie den Rückgabewert auf dem Bildschirm ein
                            }
                        }
                    }
                });
    }
}

Ich bin nicht an asynchrone Verarbeitung in Java gewöhnt, daher mag es verwirrend erscheinen, aber wenn Sie diesem Tutorial folgen, können Sie Funktionen problemlos verwenden.

** Funktion über App | Firebase aufrufen ** (Registerkarte Java Android auswählen) https://firebase.google.com/docs/functions/callable

5. Funktion hinzufügen

Die Implementierung und Bereitstellung von Funktionen erfolgt wie im Web. Wenn Sie Firebase CLI nicht global installiert haben, installieren Sie es wie folgt.

$ npm install -g firebase-tools

Initialisieren Sie in einem beliebigen Verzeichnis (auch im Projektverzeichnis).

$ firebase init

Nachdem Sie sich bei Ihrem Konto angemeldet und ein Projekt ausgewählt haben, wird ein Eingabebildschirm zur Auswahl der zu verwendenden Funktion angezeigt. Wählen Sie hier Funktionen (Leertaste).

? Which Firebase CLI features do you want to set up for this folder? Press Space
 to select features, then Enter to confirm your choices. (Press <space> to selec
t, <a> to toggle all, <i> to invert selection)
 ◯ Database: Deploy Firebase Realtime Database Rules
 ◯ Firestore: Deploy rules and create indexes for Firestore
❯◯ Functions: Configure and deploy Cloud Functions
 ◯ Hosting: Configure and deploy Firebase Hosting sites
 ◯ Storage: Deploy Cloud Storage security rules
 ◯ Emulators: Set up local emulators for Firebase features

Fügen Sie nach dem Erstellen des Funktionsverzeichnisses eine Funktion hinzu und stellen Sie sie bereit, die einfach eine solche Zeichenfolge zurückgibt.

functions/index.js


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

exports.helloWorld = functions.https.onCall((data, context) => {
  return `Hello ${data.name}`;
});
$ firebase deploy --only functions

6. Führen Sie aus

Wenn Sie Ihr Android-Gerät mit USB und Run verbinden,

Screenshot (Jan 31, 2020 8_20_58 PM).png Ich konnte bestätigen, dass "httpsCallable" problemlos verwendet werden kann und der Rückgabewert angezeigt wird.

Recommended Posts

Versuchen Sie, Firebase Cloud-Funktionen unter Android (Java) zu verwenden.
Versuchen Sie die Kommunikation mit gRPC auf einem Android + Java-Server
Versuchen Sie die Bildklassifizierung mit TensorFlow Lite unter Android (JAVA).
Versuchen Sie, den Dienst auf Android Oreo zu verwenden
Sobel-Filter mit OpenCV unter Android (Java)
Versuchen Sie, die Cloud Vision-API von GCP in Java zu verwenden
[Android] [Java] Laden Sie Bilder auf GCS (Google Cloud Storage) mit Stream mit Glide herunter
Ich habe versucht, "nifty cloud mobile backend" und "Firebase" -Authentifizierung auf Kotlin + Android zu verwenden
Versuchen Sie es mit RocksDB mit Java
Versuchen Sie, mit Java zu kratzen [Hinweis]
Versuchen Sie Hello World mit einfachem Java im Docker-Container
OSX 10.15 (Catalina) Verwenden von Java mit β
Versuchen Sie, Android Hilt in Java zu implementieren
Probieren Sie Redmine auf dem Mac Docker aus
Probieren Sie Quarkus mit IBM Cloud Shell aus
Versuchen Sie es mit Redis mit Java (jar)
Verwenden Sie Java 11 mit Google Cloud-Funktionen
Speichern Sie ArrayList mit GSON unter Android
[Java] Versuchen Sie, mithilfe von Generika zu implementieren
Versuchen Sie es mit der IBM Java-Methodenverfolgung
Versuchen Sie es mit dem Java SDK von Hyperledger Iroha
[Java] Wo haben Sie versucht, Java zu verwenden?
Versuchen Sie es mit der Zweipunktmessfunktion von Firebase Performance Monitoring. [Android]
Versuchen Sie es mit dem Java Framework Nablarch [Web Application]
Versuchen Sie es mit der Stream-API in Java
Verwenden von JupyterLab + Java mit WSL unter Windows 10
Rufen Sie Java von C ++ auf Android NDK auf
Hinweise zu Operatoren, die Java ~ String type ~ verwenden
Java lernen Versuchen Sie es mit einem Scanner oder einer Karte
Versuchen Sie es mit der JSON-Format-API in Java
Erstellen Sie eine Java 8-Entwicklungsumgebung mit AWS Cloud 9
Stellen Sie Java-Programme auf der SAP Cloud Platform bereit
Versuchen Sie es mit der REST-API von JobScheduler - Java RestClient-Implementierung -
Versuchen Sie es mit der Emotion API von Android
Versuchen Sie es mit der Wii-Fernbedienung in Java
Erstellen Sie Java-Anwendungen mit IBM Cloud-Funktionen
Versuchen Sie es mit der RestClient Test-Klasse der REST-API-Java von JobScheduler.
Versuchen Sie, eine Java 8-Umgebung unter Amazon Linux2 zu erstellen
Installieren Sie Java und Android-SDK auf dem Mac mit Homebrew
Probieren Sie Azure Service Fabric (Java) in einer Mac-Local-Umgebung aus
Anfänger versuchen Android Studio Teil 2 (Ereignisverarbeitung)
Versuchen Sie es mit Sourcetrail (Win-Version) mit Java-Code
Versuchen Sie es mit Sourcetrail (MacOS-Version) mit Java-Code
Anfänger versuchen Android Studio Teil 1 (Hello World)
Versuchen Sie eine ähnliche Suche in der Bildsuche mit dem Java SDK [Suche]
Versuchen Sie, mit JZOS von Java aus auf das Dataset zuzugreifen
Übersetzen Sie mit der Microsoft Translator Text API unter Android ~ Implementierung ~
Versuchen Sie es mit der Syntaxanalyse der COTOHA-API in Java
Geschichte der Testautomatisierung mit Appium [Android / Java]
Versuchen Sie es mit libGDX
Versuchen Sie es mit Maven
Versuchen Sie es mit powermock-mockito2-2.0.2
Versuchen Sie es mit GraalVM
Probieren Sie Java 8 Stream aus
Versuchen Sie es mit jmockit 1.48