在点击通知之前推送Parse打开通知

时间:2014-05-04 13:04:35

标签: android push-notification parse-platform

这就是我的设置。

LunchActivity有代码:

Parse.initialize(this, "MY_APP_ID", "MY_APP_KEY");
PushService.subscribe(this, "MyCity", HomeActivity.class);
ParseInstallation.getCurrentInstallation().saveInBackground();

HomeActivity类是一个简单的活动类,它打开一个默认使用的简单屏幕。我也写了一个自定义接收器。

public class CityPushReceiver extends BroadcastReceiver {
    private static final String TAG = "CityPushReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        try {
            JSONObject json = new JSONObject(intent.getExtras().getString(
                    "com.parse.Data"));

            Integer event_id = Integer.parseInt((String) json.get("event_id"));

            Intent eventIntent = new Intent(context, EventResult.class);
            eventIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            eventIntent.putExtra("event_id", event_id);
            context.getApplicationContext().startActivity(eventIntent);

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

清单文件有条目:

<receiver
    android:name="com.myapp.CityPushReceiver"
    android:exported="false" >
    <intent-filter>
        <action android:name="com.myapp.CITY_NOTIFICATION" />
    </intent-filter>
</receiver>

我使用Python代码来推送通知:

import json,httplib
connection = httplib.HTTPSConnection('api.parse.com', 443)
connection.connect()
connection.request('POST', '/1/push', json.dumps({
       "channels": [
         "MyCity"
       ],
       "data": {
     "action": "com.myapp.CITY_NOTIFICATION",
         "alert": "New Event Notification",
     "event_id": "425"
       }
     }), {
       "X-Parse-Application-Id": "APP_ID",
       "X-Parse-REST-API-Key": "API_KEY",
       "Content-Type": "application/json"
     })
result = json.loads(connection.getresponse().read())
print result

此设置无法按预期工作。我确实在我的设备上收到通知(我正在使用AVD进行测试)。但即使我没有点击托盘中的通知,它也会打开预期的EventResult活动。即使我在设备主屏幕上并且应用程序仅在后台运行,也会发生这种情况。当我点击托盘中的通知时,它会打开HomeActivity类,该类被定义为默认类。

只有当我点击托盘中的通知时,预期的行为才会打开EventResult。你们能告诉我需要改变什么吗?

3 个答案:

答案 0 :(得分:3)

我发现在Android上控制通知创建最好。如果你没有send a title or alert field推送,那么parse.com android SDK就不会创建通知,你可以在推送时自己创建一个通知。

这是我用来创建通知的方法:

void CreateNotication(Context context, String title, String pushId) {
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
            new Intent(context, MyClass.class), 0);

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
            .setSmallIcon(R.drawable.icon)
            .setContentTitle(title)
            .setContentIntent(contentIntent);

    NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    manager.notify(pushId, 1, mBuilder.build());
}

答案 1 :(得分:2)

像这样使用:

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 - 单击通知时需要打开的活动。

在您的清单文件中添加此应用程序。

<application
    android:label="@string/app_name"
    android:name="com.parse.tutorials.pushnotifications.Application"
    android:theme="@style/AppTheme">

    <activity
        android:label="@string/app_name"
        android:name="com.parse.tutorials.pushnotifications.MainActivity">

        <intent-filter>

            <action android:name="android.intent.action.MAIN" />

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

并在您的Activity类中添加此行,您需要在单击通知时打开该行。

ParseAnalytics.trackAppOpened(getIntent()); 

选中此答案:LINK

答案 2 :(得分:0)

坦率地说,这里发布的所有答案都在一个或另一个场景中,所以我会在这里提出看法。

关于我的具体问题,正确看待它的方法是,如果你实现自己的广播接收器,只要你收到推送就会调用它,无论什么代码在里面,它都会被执行。为了确保您看到通知,有两件重要的事情:

  1. 确保在发送推送时使用提醒
  2. 使用Parse给出的默认接收器。即在配置中只是告诉解析要调用哪个活动,发送带有警报的推送并让解析处理剩下的东西。它将显示警报,并在您单击警报时打开特定活动。另一种方式更复杂,那就是编写自己的接收器,并考虑所有注意事项。
  3. 很大程度上取决于您发送通知的方式。因此,请确保警报,数据,有时正确提及活动。