2016-06-15 15 views
1

Ich arbeite in einem Anwendungsbeispiel, das Push-Benachrichtigungen erhält.So öffnen Sie eine Aktivität mit einer Push-Benachrichtigung

Alles funktioniert gut, ich führe ein Python-Skript und ich bekomme die Push-Benachrichtigung.

Das Problem erscheint, wenn ich in die Benachrichtigung drücken. Ich kann machen, dass die Benachrichtigung die App öffnen ...

Project's Struktur ist:

MainActivity.java

package com.example.sergi.pruebapush; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 

public class MainActivity extends AppCompatActivity { 

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

    Intent i = new Intent(this, RegistrationService.class); 
    startService(i); 
} 
} 

NotificationsListenerService.java

import com.google.android.gms.gcm.GcmListenerService; 

public class NotificationsListenerService extends GcmListenerService { 
} 

RegistrierungService.java

package com.example.sergi.pruebapush; 

import android.app.IntentService; import android.content.Intent; 
import android.util.Log; 

import com.google.android.gms.gcm.GcmPubSub; 
import com.google.android.gms.gcm.GoogleCloudMessaging; 
import com.google.android.gms.iid.InstanceID; 

import java.io.IOException; 


public class RegistrationService extends IntentService { 
public RegistrationService() { 
    super("RegistrationService"); 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
    InstanceID myID = InstanceID.getInstance(this); 
    String registrationToken=""; 
    try { 
     registrationToken = myID.getToken(
      getString(R.string.gcm_defaultSenderId), 
       GoogleCloudMessaging.INSTANCE_ID_SCOPE, 
        null 
         ); 
     Log.d("Registration Token", registrationToken); 
     GcmPubSub subscription = GcmPubSub.getInstance(this); 
     subscription.subscribe(registrationToken, "/topics/my_little_topic", null); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} } 

TokenRefreshListenerService.java

package com.example.sergi.pruebapush; 

import android.content.Intent; 

import com.google.android.gms.iid.InstanceIDListenerService; 


public class TokenRefreshListenerService extends InstanceIDListenerService  
{ 
    @Override 
public void onTokenRefresh() { 
    Intent i = new Intent(this, RegistrationService.class); 
    startService(i); 
} 
} 

send.py

from urllib2 import * 
import urllib 
import json 
import sys 
MY_API_KEY="************************************************" 
messageTitle = sys.argv[1] 
messageBody = sys.argv[2] 
data={ 
"to" : "/topics/my_little_topic", 
"notification" : { 
    "body" : messageBody, 
    "title" : messageTitle, 
    "icon" : "ic_launcher" 
} 
} 
dataAsJSON = json.dumps(data) 
request = Request(
"https://gcm-http.googleapis.com/gcm/send", 
dataAsJSON, 
{ "Authorization" : "key="+MY_API_KEY, 
"Content-type" : "application/json" 
} 
) 
print urlopen(request).read() 

Was kann ich zu meinem Beispiel fügen Sie die App öffnen Sie die Benachrichtigung drücken?

+0

prüfen diese http://www.androidhive.info/2016/02/android-push-notifications-using-gcm-php-mysql-realtime-chat-app-part-2/ – Stallion

+0

ich werde es überprüfen , Vielen Dank! aber ich habe noch ein Beispiel, um diesen Code zu vervollständigen :) –

Antwort

-1

Sie senden eine Benachrichtigung, die nicht zum Starten der App verwendet werden kann, Sie müssen die Datennutzlast verwenden, dann implement onMessageRecieved und sendNotification.

GcmListenerService Example from google

Beispiel umfasst onMessageReceived, aufgerufen, wenn Push-Benachrichtigung vom Server empfangen, das sendNotification nennen. sendNotification implementiert, ausstehende Absicht. Welches wird MainActivity starten.

Edit:

Notification payload support

Oder können Sie in Benachrichtigung klicken hinzufügen

send.py

data={ 
"to" : "/topics/my_little_topic", 
"notification" : { 
    "body" : messageBody, 
    "title" : messageTitle, 
    "icon" : "ic_launcher" 
    "click_action" : "com.example.test" 
} 
} 

hinzufügen Intent-Filter zur Aktivität, die Sie

manifestieren beginnen soll .xml

<intent-filter> 
    <action android:name="com.example.test" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 
+0

Bitte erklären Sie die relevanten Details in Ihrer Antwort. Siehe http://meta.stackexchange.com/questions/225370/your-answer-is-in-another-castle-when-is-ansanswer-not-an-answer – jaibatrik

+0

wow! erstaunlich zee.Skyler !!! das war die Lösung, vielen Dank !!! –

Verwandte Themen