2013-03-26 7 views
6

Ich versuche Push-Benachrichtigung auf meiner Android-App zu implementieren. Also kein besserer Ort um anzufangen als die Googles Developers Seite.Push-Benachrichtigungen mit GCM auf Android

Ich versuche, dieses Tutorial hier zu folgen: GCM Demo App. Das Tutorial schlägt vor, den Beispielcode zu verwenden, der über den SDK-Manager angegeben wird. Nachdem ich das getan habe und versuche, eine Push-Benachrichtigung zu senden, sehe ich auf dem Bildschirm, wenn eine App läuft, dass ein neuer Push angekommen ist.

Allerdings, wenn die App im Hintergrund oder nicht ausgeführt wird, bekomme ich keinen Push Benachrichtigung. Wenn ich die App öffne, werden die Nachrichten erneut auf dem Bildschirm angezeigt. Aber ich bekomme nie etwas in Form einer Benachrichtigung mit einem Popup und einem Ton.

Muss ich dies manuell in Android tun? Ich dachte, es wäre ähnlich wie bei iOS, wo die Plattform dafür verantwortlich ist, Ihnen die Benachrichtigung zu zeigen.

Irgendwelche Ideen, wie ich es umsetzen kann?

+0

Zeigen Sie den Code? Laden Sie es von dem angegebenen Link herunter. Ich änderte nichts außer von meiner Projekt-ID ... – donparalias

+0

Ich bin sehr neu, aber ist es möglich, dass es einige Zeit dauert, bis die Benachrichtigung empfangen wird, falls die App nicht in ist der Vordergrund? –

+0

Sie haben eine Nachricht erhalten, dass Ihr Gerät erfolgreich hinzugefügt wurde, und erhalten dann keine Benachrichtigung, wenn Ihre Demo-App im Hintergrund ist? Recht? – Yahor10

Antwort

3

Versuchen Sie, die Registrierung aufzuheben und registrieren Sie Ihr Gerät erneut. In DemoActivity.java setzen

final String regId = GCMRegistrar.getRegistrationId(this); 
     GCMRegistrar.unregister(this); 

dann, GCMRegistrar.unregister(this); in zweiten Start entfernen.

aktualisieren

Benachrichtigungen in Ihrer Anwendung:

erstellen Klasse

public class DemoApplication extends Application { 

    private class NotifyReceiver extends BroadcastReceiver{ 

     @Override 
     public void onReceive(Context context, Intent intent) { 
       Toast.makeText(context, "RECEIVE MESSAGE", Toast.LENGTH_SHORT).show(); 
     } 
    } 

    private NotifyReceiver notifyReceiver = new NotifyReceiver(); 

    @Override 
    public void onCreate() { 
     registerReceiver(notifyReceiver, new IntentFilter("GCM_MESSAGE")); 
     super.onCreate(); 
    } 

    @Override 
    public void onTerminate() { 
     unregisterReceiver(notifyReceiver); 
     super.onTerminate(); 
    } 
} 

setzen Dann

<application 
      android:name=".DemoApplication" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" > 

in AndroidManifest.xml und in

Broadcast senden
@Override 
    protected void onMessage(Context context, Intent intent) { 
     Log.i(TAG, "Received message"); 
     String message = getString(R.string.gcm_message); 
     displayMessage(context, message); 
     context.sendBroadcast(new Intent("GCM_MESSAGE")); 
     // notifies user 
     generateNotification(context, message); 
    } 

Als Alternative Fall können Sie broadcastReceiver in Manifest, Aktivität oder vordergrund Dienst

+0

Warum? Was denkst du dir und du denkst das könnte helfen? Und selbst wenn es half, wäre es nicht gruselig, wenn man bedenkt, dass dies eine Produktions-App sein wird und der Push nicht funktionieren wird ?! – donparalias

+0

Es sollte nicht gruselig sein, wenn Sie nur eine falsche Registrierung auf Ihrem Server bearbeiten. Das wird in der Produktionsanwendung – Yahor10

+0

nicht passieren und warum war die Registrierung überhaupt nicht korrekt? Was passiert, wenn 10000 Benutzer eine falsche Registrierung erhalten? Sie werden nie meine Benachrichtigungen erhalten? – donparalias

5

registrieren aber ich habe nie mit einem Pop-Up und einem Sound etwas in Form von Benachrichtigung.

Der Sound kann in den Code programmiert werden, wenn eine Benachrichtigung ausgelöst wird. Sprich mit so etwas.

Notification notification = new Notification(icon, tickerText, when); 
notification.sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

Wenn jedoch die Anwendung auf den Hintergrund ist oder nicht läuft i dont get eine Push-Benachrichtigung

Muss ich manuell in android dies zu tun? Ich dachte, es wäre ähnlich iOS, wo die Plattform für die Anzeige der Benachrichtigung verantwortlich ist.

Ihre App ist immer geschickt, um die GCM-Daten (Push-Benachrichtigungen). Wie Sie mit diesen Daten umgehen, bleibt Ihnen überlassen. Der GCM-Intent-Service ist dafür verantwortlich, Ihnen Daten zu liefern, und das ist es auch.Sie müssen den Benachrichtigungsdienst verwenden, um dem Benutzer die entsprechende Benachrichtigung anzuzeigen.

Dieser Ansatz hat Vor- und Nachteile. Der Anwendungscode wird auf Android ausgeführt, wenn Sie Push-Benachrichtigungen erhalten, was auf dem iPhone nicht der Fall ist. Sie haben auch die Flexibilität, automatisch Aktualisierungen vorzunehmen oder den Benutzer basierend auf dem Typ der Push-Benachrichtigung zu benachrichtigen.

Registrieren Sie Ihr Gerät mit der Absender-ID, wenn Ihre App gestartet wird, und Sie sollten wie erwartet benachrichtigt werden. Alle Push-Benachrichtigungen werden an diese Methode protected void onMessage(Context context, Intent intent) auf dem GCMIntentService Ihrer Wahl geliefert.

+0

Können Sie mir helfen, wie es zu beheben? Ich brauche die Benachrichtigung, um zu erscheinen und einen Ton zu spielen. Die 2 Zeilen sind der Code, den ich implementieren sollte? – donparalias

+1

Es ist ein wenig komplizierter als das. Um eine Benachrichtigung zu senden, werfen Sie einen Blick auf den Code in dieser Frage - http://stackoverflow.com/questions/7040742/android-notification-manager-having-a-notification-wito-andintent Wie für die Benachrichtigung Pop-up Sie können die GCM-Nachricht an einen für Ihre Aktivität registrierten BroadcastReceiver übergeben, der daraufhin einen Warndialog anzeigen kann. Beispielcode für Alarmdialog - http://www.mkyong.com/android/android-alert-dialog-example/ –

+1

@DeepakBala Ihre Antwort sagt etwas über stille Benachrichtigung auf Android. Ich arbeite an Silent Push Notification von Android, wo, wenn der Benutzer bereits in der App angemeldet ist. Die App muss wissen, dass sie den Kanal abonniert hat. Der Benutzer muss jedoch nicht mit irgendeiner Benachrichtigung belästigt werden. Hast du eine Idee, wie ich das machen kann? –