Ich bin neu in Android Ich habe versucht, Hello World mit httpsCallable von Firebase Cloud-Funktionen auszuführen, daher werde ich das Verfahren zusammenfassen.
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.
Ö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.
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.
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>
Fügen Sie dem Manifest zunächst die Berechtigung zum Internetzugang (vor "
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
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
Wenn Sie Ihr Android-Gerät mit USB und Run
verbinden,
Recommended Posts