11

Desidero ricevere una notifica push da Parse e aprire un'attività List e utilizzare intent.putextra ("dataFromParse") prima di iniziare l'attività. io sono in grado di ricevere la spinta, ma aprire solo la MainActivity utilizzando questo:Aprire l'attività facendo clic sulla notifica push da Parse

PushService.setDefaultPushCallback(this, MainActivity.class); 
ParseInstallation.getCurrentInstallation().saveInBackground(); 

voglio avere questo come il difetto, ma dovrebbe anche essere in grado di avviare l'attività di List. Ho anche provato ad usare un ricevitore del cliente, ma poi sono solo in grado di aprire direttamente l'attività quando ricevo il push, non quando lo clicco.

manifest.xml:

<receiver android:name="com.example.Push android:exported="false"> 
    <intent-filter> 
     <action android:name="com.example.UPDATE_STATUS" /> 
    </intent-filter> 
</receiver> 

Push.java:

public class Push extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     //Start activity 
    } 
} 

La cosa che non sono sicuro di come dovrei è catturare la spinta in background e dire che si dovrebbe aprire l'attività Elenco con lo specifico intent.putExtra ("dataFromParse") quando l'utente fa clic sulla notifica. Dove dovrei codificarlo e come? In MainActivity, nell'attività Elenco o fai qualcosa di altro con il destinatario del cliente?

+0

di fronte lo stesso problema, una soluzione per questo? – arvindwill

risposta

13

Risolto, con attività di default come MainActivity, ma controllando l'intento, e se c'è qualcosa in "com.parse.Data" inizierò una nuova intenzione.

Intent intent = getIntent(); 
Bundle extras = intent.getExtras(); 
String jsonData = extras.getString("com.parse.Data"); 
JSONObject json = new JSONObject(jsonData); 
String pushStore = json.getString("data"); 
if(pushStore!=null) { 
    Intent pushIntent = new Intent(); 
    pushIntent.setClassName(MainActivity.this, "package.name.List"); 
    pushIntent.putExtra("store", pushStore); 
    startActivity(pushIntent); 
}   

Poi basta inviare una spinta con JSON: { "alert": "Test", "dati": "store1"}

@arvindwill Spero che questo vi aiuterà.

+0

Fantastico. L'unica cosa che suggerirei è verificare se 'extras' è nullo. Altrimenti, funziona perfettamente. Grazie! – Charx

+0

@stianboe puoi dire se stai passando il puntatore user_id per inviare notifica all'utente specifc allora non funziona mentre funziona bene per tutti gli utenti di tipo android e channel = "channel" come inviare a specifc uer – Erum

+3

ho bisogno aggiungere questo codice nel MainActivity? all'interno di onCreate? –

2

Prova questo ... funziona perfettamente ....

try { 
     Intent intent = getIntent(); 
     Bundle extras = intent.getExtras(); 
     if (extras != null) { 
      String jsonData = extras.getString("com.parse.Data"); 
      JSONObject json; 
      json = new JSONObject(jsonData); 
      String pushStore = json.getString("alert"); 
      data.setText(pushStore); 
     } 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
1

Come da documentazione ufficiale Parse on https://www.parse.com/docs/android/guide#push-notifications-customizing-notifications:

Se la spinta non ha parametro "uri", onPushOpen invocherà l'attività di avvio dell'applicazione.

Quindi, la risposta corrente accettata tiene conto solo del caso in cui la tua spinta non ha "uri" e apre la tua MainActivity. Se si desidera aprire un'attività concreta, è possibile definire uno intent-filter per tale attività e inviare il filtro intent-intent su push.

0

Si dovrebbe eseguire l'override metodo onPushOpen (...) nella classe del ricevitore:

import com.parse.ParsePushBroadcastReceiver; 

public class PushIntentReceiver extends ParsePushBroadcastReceiver { 

    @Override 
    protected void onPushOpen(Context context, Intent intent) { 
     JSONObject pushData = null; 

     try { 
      pushData = new JSONObject(intent.getStringExtra(KEY_PUSH_DATA));    
      Intent pushIntent = new Intent(context, YourActivity.class);   
      pushIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      pushIntent.putExtra("store", pushData.getString("data")); 
      context.startActivity(pushIntent); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
Problemi correlati