[JAVA] [FCM] Implementierung der Nachrichtenübertragung mit FCM + Spring Boot

Überblick

Senden Sie über den FCM-Dienst von Google eine Nachricht an Ihr Android-Gerät. Senden Sie Nachrichten mithilfe einer Server-API, die HTTP v1 unterstützt, damit Sie Push-Benachrichtigungen auf Ihrem Android-Gerät empfangen können.

Vorbereitung

Bereiten Sie ein Firebase Console-Konto vor und melden Sie sich an.

Geben Sie den Projektnamen ein (beliebiger Name) Analytics and Billing Region: Japan Klicken Sie auf Projekt erstellen

Ausstellung eines Zertifikats und Erhalt eines SHA-1-Schlüssels

keytool -exportcert -list -v \
-alias androiddebugkey -keystore ~/.android/debug.keystore

Sie werden aufgefordert, Ihr Passwort einzugeben.

android

Ich konnte es bei ausstellen.

Fügen Sie die SHA-1-Schlüsselausgabe in die Konsole ein, wenn Sie debug.keystore zum Debuggen in das Signaturzertifikat SHA-1 (optional) ausgegeben haben.

Drücken Sie App registrieren.

Erstellen Sie ein neues Projekt in Android Studio (Leere Aktivität)

Laden Sie google-services.json herunter und platzieren Sie es direkt unter der Android Studio-App.

Die folgenden Dienste wurden zu AndroidManifest.xml hinzugefügt.

        <service
            android:name="com.example.shosakaguchi.notifytest.FcmMessagingService"
            >
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>

        <service
            android:name="com.example.shosakaguchi.notifytest.FcmInstanceIdService"
            >
            <intent-filter>
                <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
            </intent-filter>

Die folgenden Abhängigkeiten wurden zur App build.gradle hinzugefügt.

    api 'com.google.firebase:firebase-core:+'
    api 'com.google.firebase:firebase-messaging:+'
    api 'com.fasterxml.jackson.core:jackson-databind:+'
    api 'com.google.firebase:firebase-auth:+'

Fügen Sie dem Projekt build.gradle die folgenden Abhängigkeiten hinzu + wenden Sie Google-Services an.

dependencies {
api "com.google.firebase:firebase-messaging:10.2.4"
}
apply plugin: 'com.google.gms.google-services'

Erstellen Sie das Projekt neu.

Generieren Sie die folgende Klasse in Android Studio.

Eine Klasse, die FirebaseMessagingService erbt (der Inhalt ist leer)

Der Name einer beliebigen Klasse erweitert FirebaseMessagingService

Klasse, die FirebaseInstanceIdService erbt

Jeder Klassenname erweitert FirebaseInstanceIdService
    @Override
    public void onTokenRefresh() {
        // Get updated InstanceID token.
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        Log.d(TAG, "Refreshed token: " + refreshedToken);

    }

Code hinzugefügt, um Token und Terminal-Token in MainActivity.java abzurufen.

public class MainActivity extends AppCompatActivity {

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

        //get device token
        FcmInstanceIdService sv = new FcmInstanceIdService();
        sv.onTokenRefresh();
    }
}

Führen Sie das Projekt auf dem Gerät aus, das die Push-Benachrichtigung erhält.

Notieren Sie sich die Token, die in der Logcat-Konsole unter Android Studio angezeigt werden.

Implementierung der Server-API (Spring Boot)

Erstellen Sie ein neues Frühlingsprojekt mit STS in Eclipse.

Fügen Sie build.gradle die folgenden Abhängigkeiten hinzu.

	compile('com.fasterxml.jackson.core:jackson-databind:+')
	compile('com.google.firebase:firebase-admin:+')

Klicken Sie in der Gradle-Aufgabe auf buildDependents.

Bereiten Sie die folgenden Informationen auf der Einstellungsseite der Firabase-Konsolenseite vor. -POST-Zielendpunkt-URL https://fcm.googleapis.com/v1/projects/全般ページのプロジェクトID/messages:send"

· Privat Schlüssel Klicken Sie auf der Seite mit den Firabase-Konsoleneinstellungen auf das Dienstkonto Klicken Sie auf der Registerkarte Firebase Admin SDK auf "Neuen privaten Schlüssel generieren". Honyara.json wird heruntergeladen. Legen Sie es daher im entsprechenden Ressourcenordner Ihres Spring-Projekts ab.

Implementierung der Initialisierungsmethode

	public static void initializeToken() throws IOException{
		FileInputStream serviceAccount = new FileInputStream("Pfad des privaten Schlüssels heruntergeladen");

		FirebaseOptions options = new FirebaseOptions.Builder()
		    .setCredentials(GoogleCredentials.fromStream(serviceAccount))
		    .setDatabaseUrl("https://Projekt-ID.firebaseio.com")
		    .build();

		FirebaseApp.initializeApp(options);
	}

Implementierung der Methode zur Erfassung von Zugriffstoken

	public static  String getAccessToken() throws IOException {
		  GoogleCredential googleCredential = GoogleCredential
		      .fromStream(new FileInputStream("Pfad des privaten Schlüssels heruntergeladen"))
		      .createScoped(Arrays.asList("https://www.googleapis.com/auth/firebase.messaging"
		    		  ));
		  googleCredential.refreshToken();
		  return googleCredential.getAccessToken();
	}

Vorerst sollte die Hauptklasse verarbeitet werden, um eine Nachricht zu senden, wenn die Serveranwendung ausgeführt wird.

TestProject.java

	public static void main(String[] args) {
		SpringApplication.run(PushAppTestApplication.class, args);
		System.out.println("start");

		try {
		//initialize firebasio
		initializeToken();

		//post param create
		URL url = new URL(POST-Zielendpunkt-URL);
		HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
		httpURLConnection.setRequestMethod("POST");
		httpURLConnection.setRequestProperty("Authorization", "Bearer " + getAccessToken());
//		System.out.println("token" + getAccessToken());
		httpURLConnection.setRequestProperty("Content-Type", "application/json; UTF-8");
		httpURLConnection.setDoOutput(true);

		httpURLConnection.connect();

		OutputStream out = httpURLConnection.getOutputStream();
		PrintStream ps = new PrintStream(out);
		ps.print(KÖRPER Teil der Anforderungsnachricht JSON (später beschrieben));
		ps.close();

		//return response output
		InputStream is = httpURLConnection.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        String s;
	    while ((s = reader.readLine()) != null) {
			System.out.println(httpURLConnection.getResponseMessage() + httpURLConnection.getResponseCode());
	        }
			reader.close();
			httpURLConnection.disconnect();
			} catch(Exception e) {
				e.printStackTrace();
		}
		System.out.println("end");
	}

KÖRPER Teil der Anforderungsnachricht JSON

	private final static String reqJson = "{\n" +
			"  \"message\":{\n" +
			"    \"token\" : \"Token, die in der Logcat-Konsole unter Android Studio angezeigt werden",\n" +
			"    \"notification\" : {\n" +
			"      \"body\" : \"Test Nachricht\",\n" +
			"      \"title\" : \"Testtitel\",\n" +
			"      }\n" +
			"   }\n" +
			"}";

Das ist alles für die Implementierung.

Dieses Mal habe ich hauptsächlich das Senden von Push-Benachrichtigungen an ein einzelnes Terminal implementiert. In der Praxis ist es notwendig, die Annahme beim Senden an mehrere Terminals, die Annahme der Übertragungszeit (Cron Batch usw.), den Mechanismus zum Senden und Speichern des Geräte-Tokens an den Server sorgfältig zu berücksichtigen.

Ab dem nächsten Mal möchte ich diese HowTos und Beispiele vorstellen.

Danke für deine harte Arbeit.

Recommended Posts

[FCM] Implementierung der Nachrichtenübertragung mit FCM + Spring Boot
Nachricht erlöschen (Spring Boot)
Asynchronisation der Nachrichtenübertragung
Versuchen Sie es mit Spring Boot Security
Ändern Sie die Spring Boot-Validierungsnachricht
Minimale Anpassung der Spring Boot-Fehlerseite (Implementierung der ErrorController-Schnittstelle)
Ausführen der Erstverarbeitung mit Spring Boot Command Line Runner
Memorandum beim Spring Boot 1.5.10 → Spring Boot 2.0.0
Spring Boot Tutorial Verwenden der Spring Security-Authentifizierung
Implementierung der Validierung mit regulären Ausdrücken
Die Nachrichtenkooperation begann mit Spring Boot
Ich möchte die Standardfehlermeldung von Spring Boot steuern
Unbekannter Fehler in Zeile 1 von pom.xml bei Verwendung von Spring Boot in Eclipse
[Android] Implementierung von SideVolling ListView mit RecyclerView
Implementierung der Benutzerauthentifizierungsfunktion mit devise (2)
Versuchen Sie es mit Spring Boot mit VS-Code
Implementierung der Benutzerauthentifizierungsfunktion mit devise (1)
WebMvcConfigurer-Memorandum von Spring Boot 2.0 (Spring 5)
Implementierung von Registerkarten mit TabLayout und ViewPager
Implementierung der Benutzerauthentifizierungsfunktion mit devise (3)
Asynchrone Verarbeitung mit Spring Boot unter Verwendung von @Async
So teilen Sie eine Spring Boot-Nachrichtendatei
[Rails] Implementierung der Suchfunktion mit Gem's Ransack
Zusammenfassung dessen, was ich über Spring Boot gelernt habe
[Rails] Implementierung der Bildvergrößerungsfunktion mit Lightbox2
Erstellen Sie eine Spring Boot-Anwendung mit IntelliJ IDEA
Die Geschichte der Erhöhung der Spring Boot 1.5-Serie auf die 2.1-Serie
Lassen Sie uns das Gefühl von Spring Boot + Swagger 2.0 überprüfen
Verschiedene Korrespondenztabellen zwischen Spring Framework und Spring Boot
Wenn @Transactional of Spring Boot nicht funktioniert
[JQuery] Implementierungsverfahren der AutoComplete-Funktion [Java / Spring]
[Rails] Implementierung des PV-Nummernrankings mit Impressionist
[Rails] Implementierung einer Bild-Diashow mit Bootstrap 3
Wenden Sie Twitter Bootstrap 4 mithilfe von Webjars auf Spring Boot 2 an
[Überprüfung] Vergleich der Spring Boot- mit der Micronaut-Boot-Geschwindigkeit
CSRF-Gegenmaßnahmenrichtlinie und Implementierungsbeispiel in einer REST-Anwendung unter Verwendung von "Spring Boot" + "EXT JS"
Fordern Sie Spring Boot heraus
Lassen Sie uns einen Leistungsschalter für den Backend-Service mit Actuator of Spring Boot (Teil 1) herstellen.
Spring Boot Form
Spring Boot Denken Sie daran
gae + frühlingsstiefel
Implementierung der Google-Anmeldung mithilfe der Google OAuth 2.0-Authentifizierung (Server Edition)
Testen von JPA-Entitäten und -Repositorys mit Spring Boot @DataJpaTest
Geben Sie die statische Ressourcencodierung in Spring Boot an
Versuchen Sie es mit einem DI-Container mit Laravel und Spring Boot
[Hinweis] Festlegen der Datei bei Verwendung von Logback mit Spring Boot
Die Nachrichtenkooperation begann mit der Spring Boot Apache Kafka Edition
Untersuchte asynchrone Ausführung von Abfragen in Spring Boot 1.5.9
Ein Memorandum über die Sucht nach Spring Boot2 x Doma2
Versuchen Sie, OpenID Connect mit Keycloak (Spring Boot-Anwendung) zu verwenden.
Greifen Sie mit jdbcTemplate auf das integrierte h2db des Spring Boot zu
05. Ich habe versucht, die Quelle von Spring Boot zu löschen
[JUnit 5-kompatibel] Schreiben Sie einen Test mit JUnit 5 mit Spring Boot 2.2, 2.3
Ich habe versucht, die Kapazität von Spring Boot zu reduzieren