Push Notification oder was ähnliches

  • Antworten:12
  • Bentwortet
Volkan Aydin
  • Forum-Beiträge: 187

05.06.2019, 21:56:04 via Website

Hallo Allerseits, lang ist es her, schön das es die seite noch gibt! ;)

Vorwort:
Nach ein paar Jahren des versuchens hab ich doch die eine oder andere App geschafft, nun möchte ich aber einen Schritt weiter gehen.

Ich mache für unser Kollegenkreis, die gerne Bier trinken, eine Bierkarten App, klingt dämlich, aber bei einer Auswahl von über 60 Bieren und ständigen wechseln, braucht es jetzt einfach das. Mit eingebautem Kassensystem! ( danke dafür für die tollen antworten auf meinen letzten Post!)

Nun ist es so, das meine Kollegen in der App auf Ihrem Handy nach was neuen Suchen, und dies in der Bar gleich bestellen wollen. Der Baarkeeper, hat die gleiche App mit admin login, und jede Minute wird die Datenbank aktuallisiert, oder mit einem Button manuell.
Ist doch aber blöd!?!

Frage:
Ich suche die möglichkeit, das wenn der eine in der App einBier bestellt und auf den Button klickt, das der Admin sofort eine benachrichtigung erhält.
Jetzt kommt das Problem, meine Sprache, ich kann nicht wirklich english ( ja Deutsch auch nicht so gut :) ) und kann die Frage dementsprechend nicht richtig formulieren. Ich bin immer wieder auf Push Notification gestossen, und das mit Firebase? Ist das das richtige für mich? Meine App ist aber nicht im Playstore verfügbar.... was muss ich machen, nach welchen funktionen googlen? :)

Vielen dank in Vorraus!

Kommentieren
Beste Antwort
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

12.06.2019, 10:34:48 via Website

Hallo Volkan,

was genau ist dein Problem?
Du weißt nicht wie du das Token an deinen Server übermitteln kannst?
Das sollte z.b. über eine API o.ä. gehen, die dein Server anbietet.
Bitte beschreibe mal genau, wo du nicht weiter kommst.

Anbei: Den IDService sollte man auch nicht mehr nutzen und kann mit dem MessagingService vereinfacht werden:
https://medium.com/android-school/firebaseinstanceidservice-is-deprecated-50651f17a148

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Volkan Aydin
Kommentieren
swa00
  • Forum-Beiträge: 3.704

05.06.2019, 22:35:21 via Website

Hallo,

FCM ist schon das Richtige, nur musst du auch dafür eigentlich einen Server aufsetzen,
auch wenn er lokal fungiert. (z.b. PHP) Irgendwo benötigst du ja eine Userverwaltung.

Der PLaystore ist nicht notwendig

https://firebase-php.readthedocs.io/en/latest/cloud-messaging.html

— geändert am 05.06.2019, 22:45:03

Liebe Grüße - Stefan
[ App - Entwicklung ]

Hilfreich?
Kommentieren
Volkan Aydin
  • Forum-Beiträge: 187

06.06.2019, 22:08:13 via Website

Vielen dank schon mal für eure Antworten.!

Ich werde mich mal durch dieses Firebase mal arbeiten, kann sein das ich in einigen tagen nochmals nachhacke. Leider ist mit den Kinder und Frau immer was los.!

Den Server hab ich ja. Demnach kann ich über einen PHP script meine App ansprechen.

Was mich etwas stutzig macht, wie zum Teufel soll das gehen, woher weiss Firebase das da ein Handy bzw ein Tablet ist das er da antriggern kann? Was hat Firebase davon, ist das etwas von Google selbst????

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.06.2019, 22:14:19 via Website

Hallo Volkan,

wenn die App auf einem Gerät installiert ist, muss sich diese auf deinem Server mit einer eindutigen ID "registrieren".
Wenn du dann eine Nachricht senden willst, dann sendest du die Nachricht an diese Eindeutige ID über Firebase. Diese können das intern wieder dem passenden Gerät zuordnen.
Und Firebase gehört zu Google, daher funktioniert das.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Volkan Aydin
  • Forum-Beiträge: 187

11.06.2019, 22:45:47 via Website

So. ich hatte nun endlich Zeit mir Firebase einzurichten, hat erstaunlich gut geklappt. Es hat meine App sofort erkannt. Nun bin ich mir Das ganze am einrichten in der App. Bis auf eine Sache hat alles super geklappt.

Nur eins habe ich nicht fertig gebracht, "FirebaseInstanceIdService " als extends zu Importieren, letzter Code. Ich bin hin und her, habe einige tutorials angeguckt. Hab eigentlich verstanden für was die Funktionen sind, aber aus irgend einem Grund will es nicht klappen.

Diese 4 Files habe ich bearbeitet..... wieder schon mal im voraus danke... und sorry falls ich nicht immer sofort reagiere!

Projekt:

buildscript {

    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.4.1'
        classpath 'com.google.gms:google-services:4.2.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

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

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

App:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.dzdzdz.br.bandroom"
        minSdkVersion 22
        targetSdkVersion 28
        versionCode 13
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    useLibrary 'org.apache.http.legacy'
}

dependencies {
    implementation 'com.google.firebase:firebase-messaging:18.0.0'
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:design:28.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
apply plugin: 'com.google.gms.google-services'

MyFirebaseMassagingService.java

package com.dzdzdz.br.bandroom.MyFireBase;

import android.util.Log;

import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;

public class MyFirebaseMessagingService extends FirebaseMessagingService {
    private static final String TAG = "FCM Service";
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        // TODO: Handle FCM messages here.
        // If the application is in the foreground handle both data and notification messages here.
        // Also if you intend on generating your own notifications as a result of a received FCM
        // message, here is where that should be initiated.
        Log.d(TAG, "From: " + remoteMessage.getFrom());
        Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody());
    }
}

FirebaseIdService.java

package com.dzdzdzdz.br.bandroom.MyFireBase;

import android.util.Log;

import com.google.firebase.iid.FirebaseInstanceId;


public class FirebaseIDService extends FirebaseInstanceIdService {
    private static final String TAG = "FirebaseIDService";



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

        // TODO: Implement this method to send any registration to your app's servers.
        sendRegistrationToServer(refreshedToken);
    }

    /**
     * Persist token to third-party servers.
     *
     * Modify this method to associate the user's FCM InstanceID token with any server-side account
     * maintained by your application.
     *
     * @param token The new token.
     */
    private void sendRegistrationToServer(String token) {
        // Add custom implementation, as needed.
    }
}

— geändert am 11.06.2019, 23:06:12

Hilfreich?
Kommentieren
Beste Antwort
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

12.06.2019, 10:34:48 via Website

Hallo Volkan,

was genau ist dein Problem?
Du weißt nicht wie du das Token an deinen Server übermitteln kannst?
Das sollte z.b. über eine API o.ä. gehen, die dein Server anbietet.
Bitte beschreibe mal genau, wo du nicht weiter kommst.

Anbei: Den IDService sollte man auch nicht mehr nutzen und kann mit dem MessagingService vereinfacht werden:
https://medium.com/android-school/firebaseinstanceidservice-is-deprecated-50651f17a148

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Volkan Aydin
Kommentieren
Volkan Aydin
  • Forum-Beiträge: 187

12.06.2019, 13:13:39 via Website

Mein problem ist/war wirklich nur das importieren des extends "FirebaseInstanceIdService".
Das problem ist ja, das ich noch gar nicht weiss, wofür es ist:) ich konnte ja noch nichts zur app schicken da ich es nicht zum laufen gebracht habe...
mein english wurde zwar immer besser, ich bin aber jemand der einfach solange versucht bis ich weiss was genau abgeht. Manchmal geht das etwas länger, aber wenn es mal drin ist, klappts, meine erfolge sind immerhin das ich freihand irgendwelche arrayadapter etc erstellen kann ohne copy paste, genauso mit den regex befehlen.

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

12.06.2019, 15:13:36 via App

Tut es jetzt?
Wenn nein was ist die Fehlermeldung?

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Volkan Aydin
  • Forum-Beiträge: 187

12.06.2019, 18:24:11 via Website

Bin endlich zuhause und habe noch kurz Sturmfrei :)

Also im Moment tut sich jetzt gar nix mehr. :(
Ich habe 2 mal versucht, meine App auf dem Tablet zu laden, und zwei mal ist mein PC abgekackt, nun habe ich versucht alles nochmal von vorne einzugeben, habe die File gelöscht, die Tags aus den Manifest, Gradle app und Projekt entfernt, und jetzt kommt nur noch
"ERROR: Cannot lock Build Output Cleanup Cache (C:\Users\Volkan\StudioProjects\Bandroom.gradle\buildOutputCleanup) as it has already been locked by this process." und Open FIle, jetzt wird mir die Gradle.app angezeigt:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.awad.br.bandroom"
        minSdkVersion 22
        targetSdkVersion 28
        versionCode 13
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    useLibrary 'org.apache.http.legacy'
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:design:28.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
apply plugin: 'com.google.gms.google-services'

Was hab ich den jetzt wieder verbockt? Mist... Frau und Kinder sind wieder da....... vieleicht kannst du mir ja sagen was ich wieder angestellt habe..... ansonsten muss ich wohl zuerst dieses Problem lösen :D .... eyeyeyeyey ;)

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

12.06.2019, 18:55:23 via Website

Das Problem kenne ich nicht und habe daher auch keine Lödung parat.
Vielleicht startest du mal den rechner neu.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

12.06.2019, 19:53:04 via Website

Hallo ich glaube du hast dei Firebase lib im gradle vergessen die du zu vor auch hattest.
in deinem neuen Projekt scheinbar nicht.

implementation 'com.google.firebase:firebase-messaging:18.0.0'

https://blog.mindorks.com/pushing-notifications-in-android-using-fcm
Ist leider in Kotlin geschrieben sollte aber kein Problem sein das als Java Fan zu verstehen.

— geändert am 12.06.2019, 20:03:52

Hilfreich?
Pascal P.
Kommentieren
Volkan Aydin
  • Forum-Beiträge: 187

12.06.2019, 22:09:35 via Website

Naja... für mich gibt es keine kleinen Probleme.... ( Punkt) :D

Ich hab alles wieder zum laufen gebracht. Danke Pascal P. Vieleicht hätte es ja gleich funktioniert, wenn ich dieses ServiceID nicht auf biegen und brechen versucht habe zum laufen zu bringen... jedenfalls konnte ich mir einen token generieren und einen Test senden..... Ich werde mich bestimmt bald wieder melden. Jetzt aber zuerst mal die Woche durchbringen und auf ein langes Wochenende hoffen, damit ich endlich das teil fertigbringe :)

Hilfreich?
Pascal P.
Kommentieren