How to receive parse push notifiactions on an andr

2019-02-14 09:09发布

问题:

How to intent from parse push notification. i f anybody implemented parse push please help.

Parse.initialize(Splash.this,"id","id");
ParseInstallation.getCurrentInstallation().saveInBackground();
PushService.setDefaultPushCallback(Splash.this, ParsePush.class);

implementing like this.

can't get any values in jsonData.

public class ParsePush extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        ParseInstallation.getCurrentInstallation().saveInBackground();
        Intent intent = getIntent();
        Bundle extras = intent.getExtras();
        String jsonData = extras.getString("com.parse.Data");
        System.out.println("Data Json : " + jsonData);
    }

}

need to implement an intent from the push notification (parse). that is need to show an activity on clicking the push.. please help.

回答1:

You have to write a parse broadcast receiver in order to receive notification.. Write in your manifest

  <receiver
        android:name="com.example.package.ParseBroadcastReceiver"
        android:exported="false"
        android:enabled="true">
        <intent-filter>
            <action android:name="com.example.package.MESSAGE" />
        </intent-filter>
    </receiver>

then define a broadcast receiver

public class ParseBroadcastReceiver extends BroadcastReceiver{

public static final String ACTION                       =   "com.example.package.MESSAGE";
public static final String PARSE_EXTRA_DATA_KEY         =   "com.parse.Data";
public static final String PARSE_JSON_CHANNEL_KEY       =   "com.parse.Channel";

@Override
public void onReceive(Context context, Intent intent) {

     String action = intent.getAction();
        String channel = intent.getExtras().getString(PARSE_JSON_CHANNEL_KEY);
        JSONObject json = new JSONObject(intent.getExtras().getString(PARSE_EXTRA_DATA_KEY));

    }

Now this json object will contain the data that you have send from parse.. For instance if you have to send notification using javascript api

   Parse.Push.send({where: query, // Set our Installation query
                data: {                   
                    triggerKey:triggerValue, 
                    objectType:"android",
                    action:"com.example.package.MESSAGE"
                }
              },{
              success: function() {
                // Push was successful

              },
              error: function(error) {
                // Handle error

              }
            });

Note that in your push notification you have to mention the "action" key and it should be same as the one you have mentioned in your broadcast receiver intent filter.



回答2:

Use like this :

  public class Application extends android.app.Application {

  public Application() {
  }

  @Override
  public void onCreate() {
    super.onCreate();
    Parse.initialize(this, "YOUR_APP_ID", "YOUR_CLIENT_KEY");

    PushService.setDefaultPushCallback(this, MainActivity.class);
  }
}

//MainActivity.java - Activity you need to open when the notification is clicked.

In your Manifest file add this application.

<application    android:name="com.parse.tutorials.pushnotifications.Application"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.parse.tutorials.pushnotifications.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity> </application>

And add this line in your MainActivity class which you need to open when the notification is clicked.

Bundle mBundle = getIntent().getExtras();
if (mBundle != null) {
    String mData = mBundle.getString("com.parse.Data");
    System.out.println("DATA : xxxxx : " + mData);
}


回答3:

Try below code in your activity:

    Parse.initialize(this, Constants.PARSE_APPLICATION_ID,
            Constants.PARSE_CLIENT_ID);


    ParseUser.enableAutomaticUser();
    ParseACL defaultACL = new ParseACL();

    // If you would like all objects to be private by default, remove this line.
    defaultACL.setPublicReadAccess(true);

    ParseACL.setDefaultACL(defaultACL, true);
    // To track statistics around application
    ParseAnalytics.trackAppOpened(getIntent());

    // inform the Parse Cloud that it is ready for notifications
    PushService.setDefaultPushCallback(this, TestActivity.class);
    try {
        Bundle b = getIntent().getExtras(); 
        JSONObject jsonObject = new JSONObject(b.getString("com.parse.Data"));
        Toast.makeText(getApplicationContext(), "" + jsonObject.getString("alert"), Toast.LENGTH_LONG).show();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


回答4:

You can download complete code from here

Add Google play service lib in dependency

Initialize Parse in Application Class

   Parse.initialize(this, getResources().getString(R.string.applicationid), getResources().getString(R.string.clientkey));


    ParsePush.subscribeInBackground("", new SaveCallback() {
        @Override
        public void done(ParseException e) {
            if (e == null) {

                Log.d("com.parse.push", "successfully subscribed to the broadcast channel.");
            } else {
                Log.e("com.parse.push", "failed to subscribe for push", e);
            }
        }
    });

Add Following Permissions in AndroidMainifest.xml

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<!--Change with your package name-->
<permission android:name="com.nkdroid.android.pushnotification.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<!--Change with your package name-->
<uses-permission android:name="com.nkdroid.android.pushnotification.permission.C2D_MESSAGE" />

Add following things also

    <receiver android:name="com.parse.ParseBroadcastReceiver">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.USER_PRESENT" />
        </intent-filter>
    </receiver>
    <receiver android:name="com.parse.GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />

            <!--Change with your package name-->
            <category android:name="com.nkdroid.android.pushnotification" />
        </intent-filter>
    </receiver>
    <receiver android:name="com.parse.ParsePushBroadcastReceiver" android:exported="false">
        <intent-filter>
            <action android:name="com.parse.push.intent.RECEIVE" />
            <action android:name="com.parse.push.intent.DELETE" />
            <action android:name="com.parse.push.intent.OPEN" />
        </intent-filter>
    </receiver>

    <!-- add project number of google console project-->
    <meta-data android:name="com.parse.push.gcm_sender_id" android:value="@string/sender_id" />

    <!-- replace icon with your push icon identifier -->
    <meta-data android:name="com.parse.push.notification_icon" android:resource="@mipmap/ic_launcher" />