解析|推送通知直接进入Web视图,如何?

时间:2014-12-17 14:11:15

标签: objective-c parse-platform push-notification tableview

我在网上搜索,解析文档并询问很多人,但没有人能指出我该怎么做。 我有一个RSS应用程序,将文章放入UITableView。 当我发送推送它时,打开应用程序本身,但不打开我想要的文章(很明显,因为我不知道如何编码)。 任何人都可以给我一些想法怎么做? (代码示例也很有用)。

1 个答案:

答案 0 :(得分:0)

首先,您必须实现自己的Receiver类而不是默认的Parse push接收器,并将其放入AndroidManifest.xml中,如下所示:

<receiver android:name="net.blabla.notification.PushNotifHandler" android:exported="false">
          <intent-filter>
            <action android:name="net.bla.PUSH_MESSAGE" />
          </intent-filter>
        </receiver>

在PushNotifHandler.java类中,你应该将一些参数放到Intent中,你将抛出如下:

public class PushNotifHandler extends BroadcastReceiver{
    private static final String TAG = PushNotifHandler.class.getSimpleName();
    private static int nextNotifID = (int)(System.currentTimeMillis()/1000);
    private static final long VIBRATION_DURATION = 500;

    @Override
    public void onReceive(Context context, Intent intent) {
        try {
            String action = intent.getAction();

            Intent resultIntent = new Intent(context, ToBeOpenedActivity.class);
            JSONObject jsonData = new JSONObject(intent.getExtras().getString("com.parse.Data"));
            fillNotificationData(jsonData, action, resultIntent);

            String title = jsonData.getString("messageTitle") + "";
            String message = jsonData.getString("messageText") + "";

            TaskStackBuilder stackBuilder = TaskStackBuilder.from(context);
            stackBuilder.addParentStack(ToBeOpenedActivity.class);
            stackBuilder.addNextIntent(resultIntent);
            PendingIntent resultPendingIntent =
                    stackBuilder.getPendingIntent(
                            0,
                            PendingIntent.FLAG_UPDATE_CURRENT
                    );

            Notification notification;
            NotificationCompat.Builder builder = new NotificationCompat.Builder(context).
                    setSmallIcon(R.drawable.icon).
                    setContentTitle(title).
                    setContentText(message).
                    setAutoCancel(true);

            builder.setContentIntent(resultPendingIntent);
            notification = builder.getNotification();

            NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            mNotificationManager.notify(TAG, nextNotifID++, notification);

            vibratePhone(context);

        } catch (Exception e) {
            Log.d(TAG, "Exception: " + e.getMessage());
        }
    }

    private void vibratePhone(Context context) {
        Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); 
        vibrator.vibrate(VIBRATION_DURATION);
    }

    private void fillNotificationData(JSONObject json, String action, Intent resultIntent)
            throws JSONException {
        Log.d(TAG, "ACTION : " + action);
        resultIntent.putExtra("paramString", json.getString("paramFromServer"));
    }

}

使用键“com.parse.Data”,您将获得从服务器代码发送的参数为json格式。从此json获取paramString和paramBoolean参数后,您将把这些参数放入您创建的新Intent中,如fillNotificationData中所示。方法

onReceive方法的其他部分会创建本地通知并振动设备。

最后在您的活动类onResume()方法中,您将检查意图参数,以实现您是否从推送通知中打开应用程序。

@Override
public void onResume() {
    super.onResume();
    checkPushNotificationCase(getIntent());
}

private void checkPushNotificationCase(Intent intent) {
    Bundle extraParameters = intent.getExtras();
    Log.d("checking push notifications intent extras : " + extraParameters);
    if (extraParameters != null) {
        if(extraParameters.containsKey("paramString")) {
            // doSomething
        }
    }
}

我希望你为Android提出这个问题:))