Sofortiges bescheid über Notifications (Wie WhatsApp z.B)?

  • Antworten:15
Michele
  • Forum-Beiträge: 1.525

28.08.2013, 03:13:50 via Website

Hallo liebes Forum.

Ich frage mich die ganze Zeit wie das genau funktioniert, wenn ich z.B was auf mein Server
Sende wie z.B eine Nachricht, das das dann mein Partner oder Freunde in Echtzeit Empfängen oder bescheid
bekommen über die Notification/Activity/Service?

Das beste beispiel ist ja was ich meine "WhatsApp".

Die App muss ja über den Service,BroadcastReceiver,Notification oder oder bescheid bekommen? Oder?
Aber wenn, wie? Wann weiß die Notification z.B wann was Neu ist? Wie z.B bei WhatsApp eine Neue Nachricht auf dem Server/Handy?

Der BroadcastReceiver/Service wird doch nicht jede sek. Neu gestartet über den AlarmManager im Service
und prüft dann ob was Neues vorhanden ist?
Oder das die ganze Zeit eine while schleifen läuft?

Mag mir einer das genauer erklären und was ich brauch oder wissen muss damit sowas Funktioniert?


LG

— geändert am 28.08.2013, 03:15:50

Antworten
Dietrich Gebert
  • Forum-Beiträge: 245

28.08.2013, 12:08:12 via Website

Hi,

ich kenne das bisher nur aus der Webentwicklung hab mal einen Chat programmiert.

Du sendest vom Client eine Nachricht an das jeweilige User Objekt auf der Serverseite.

Der Client deiner Kontaktperson macht in gewissen Abständen einen Request an den Server und schaut on in seinem User Objekt Nachrichten für ihn vorhanden sind.

Wenn nein:
Liefert er im Callback des Clients einfach z.B ein Leehrstring zurück und wartet die Zeit ab bis zum nächsten Request.

Wenn ja:
Holt er sich die Nachricht vom Server und löscht oder archiviert diese im User Objekt beim Server.
Danach liefert er diese Nachricht wieder im Callback des Clients zurück, der Client verarbeitet die Nachricht wie, z.B auf dem Bildschirm anzeigen.
Und wartet dann ab bis er den nächsten Request starten kann.

Ganz wichtig wie oben beschrieben bitte nicht den Server in einer Schleife mit Requests zuspammen, definiere eine Wartezeit bis zum nächsten Request.

Ich hoffe, dass ich das einigermaßen verständlich erklären konnte.

Grüße
Dima

Antworten
impjor
  • Forum-Beiträge: 1.793

28.08.2013, 13:33:16 via App

Michele such mal nach Google Cloud Messaging: Ein Client sendet einen Request an deinen Server, dein Server an Google Cloud Messaging(GCM), und GCM benachrichtig dann das Phone des Empfängers. So hast du dann Push-Notifications, welche besser sind als ständiges pollen (alle 10s anfragen, ob es neue Nachrichten gibt)

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Michele
  • Forum-Beiträge: 1.525

28.08.2013, 16:01:49 via Website

Hallo alle zusammen.

Ich danke euch allen für die guten und vielen Infos.

Werde mich dann mal damit auseinander setzen.:D
Bin gespannt.



LG

Antworten
Michele
  • Forum-Beiträge: 1.525

29.08.2013, 01:52:56 via Website

Also habe eine gute Anleitung gefunden für mein Server etc zum Testen des GCM.

Jetzt habe ich aber ein Problem was ich nicht verstehe.

Ich muss
" import com.google.android.gcm.GCMBaseIntentService; "
" import com.google.android.gcm.GCMRegistrar; " etc importieren.

Habe ich auch gemacht und es wird keine Fehler mehr angezeigt.
Aber will ich die App dann starten kommt die Fehlermeldung auf einmal.

1Gradle: error: package com.google.android.gcm does not exist
2Gradle: error: cannot find symbol class GCMBaseIntentService
3Gradle: error: method does not override or implement a method from a supertype
4
5und und usw halt.

Hoffe einer kann mir helfen oder einen kleinen Tipp geben.


LG

Antworten
Michele
  • Forum-Beiträge: 1.525

29.08.2013, 19:51:51 via Website

Markus B.
Hi,
wie baust du die Geschichte ? (Gradle, mvn, ant ... )

Gruß,
Markus

Hey Markus.
Wie meinst du das nun?

Ich kenne mich gar nicht mit Gradle etc aus.
Ich bin von Eclipse zu Android Studios rüber und nun lese ich immer Gradle und wieder Gradle.
Weiß gar nicht was das ist und was andere damit immer meinen.

Bei Eclipse klappt alles.
Aber sobald ich es bei Android Studio testen will meckert er wie hier beschrieben.


LG

Antworten
Markus B.
  • Forum-Beiträge: 636

29.08.2013, 20:17:59 via Website

Hi,
najo ich müsste halt wissen was du genau machst, damit deine App auf das Gerät kommt.
Dann kann man mal genau schauen was da nicht will. Wenn du im Android Studio die dependencies manuell hinzufügst kann es nicht laufen.
Projekte im Android Studio setzten nun auf das gradle build system (default). Ich würde mich dem auch nicht verschließen, da es echt Spaß machen kann. Das Reinfuchsen in das Thema ist nur ein bissel Arbeit.

Ich kann dir hier mal ein Beispiel Config geben:

1buildscript {
2 repositories {
3 mavenCentral()
4 }
5 dependencies {
6 classpath 'com.android.tools.build:gradle:0.5.+'
7 }
8}
9apply plugin: 'android'
10
11repositories {
12 mavenLocal()
13 mavenCentral()
14}
15
16dependencies {
17 compile 'com.android.support:support-v4:13.0.+'
18 compile 'com.google.android.gms:play-services:3.2.25'
19 compile 'com.google.code.gson:gson:2.2.4'
20}
21
22android {
23 compileSdkVersion 18
24 buildToolsVersion "17.0.0"
25
26 defaultConfig {
27 minSdkVersion 18
28 targetSdkVersion 18
29 }
30}

Hier hatte ich auch meine Probleme: https://www.nextpit.de/de/android/forum/thread/566702/Android-und-Gradle-NoClassDefFoundError

Gruß,
Markus

— geändert am 29.08.2013, 20:22:25

Antworten
Michele
  • Forum-Beiträge: 1.525

29.08.2013, 20:22:28 via Website

Hallo Markus.

Ich habe das hier versucht:
http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/

Auf Eclipse geht es. Unter Android Studio nicht.
Da ja der einzige Fehler kommt:

1Gradle: error: package com.google.android.gcm does not exist
2Gradle: error: cannot find symbol class GCMBaseIntentService

Das GCM.jar habe ich in den libs folder gepackt.
Dann habe ich noch "add libary" gemacht.
So meckert keine Class mehr rum. Nur der compiler wohl.


LG

— geändert am 29.08.2013, 20:22:42

Antworten
Michele
  • Forum-Beiträge: 1.525

29.08.2013, 20:25:44 via Website

1buildscript {
2 repositories {
3 mavenCentral()
4 }
5 dependencies {
6 classpath 'com.android.tools.build:gradle:0.5.+'
7 }
8}
9apply plugin: 'android'
10
11repositories {
12 mavenCentral()
13}
14
15android {
16 compileSdkVersion 18
17 buildToolsVersion "18.0.1"
18
19 defaultConfig {
20 minSdkVersion 10
21 targetSdkVersion 16
22 }
23}
24
25dependencies {
26 compile 'com.android.support:support-v4:18.0.0'
27}


Bin ja dann noch auf was einfaches gestoßen als Test für GCM.
https://pushbots.com/

Aber genau das gleiche problem.
Da muss ich auch eine .jar hinzufügen.



LG

— geändert am 29.08.2013, 20:33:07

Antworten
Markus B.
  • Forum-Beiträge: 636

29.08.2013, 20:39:41 via Website

Okay da haben wir das Problem:

Gradle weiß nichts von den denpendencies zum play-service und somit kann es nicht funktionieren.

Folgendes checken:

$ANDROID_HOME/extras/google/m2repository/com/google/android/gms/play-services
schau mal, ob es den Pfad bei dir gibt. Wenn nicht eben im Android-Tool die aktuelle Version den play-services ziehen.

In dem dependencies Bereich folgendes aufnehmen:
compile 'com.google.android.gms:play-services:3.2.25'

Dann kennt gradle die dependencie und es rennt auch auf dem device. Danach kann die *.jar aus dem Libs-Ordner entfernen.
Folgende Seite hilft die bei dem auffinden von dependencies und zeigt dir wie diese in gradle eingebunden werden:
http://gradleplease.appspot.com/
Basiert auf dem dependencie managment von mvn.

Gruß,
Markus

Michele

Antworten
Michele
  • Forum-Beiträge: 1.525

29.08.2013, 20:50:19 via Website

Play Service ist Aktuell.:D

Scheint wohl so zugehen.:D
Lag echt wohl nur am gradle.
Danke dir sehr für die Infos,Link etc.:D

Das problem ist nur, wie binde ich andere fremde .jar/libs ein in die gradle?
Die kennt http://gradleplease.appspot.com/ nicht.

z.B wie von hier: https://pushbots.com/
Da brauche ich die PushBots.jar wo auch Automatisch noch GCM mit drin ist.


LG

Antworten
Michele
  • Forum-Beiträge: 1.525

29.08.2013, 20:59:02 via Website

Danke werde mir das mal angucken gleich.


LG

Antworten