这就是我的设置。
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
。你们能告诉我需要改变什么吗?
答案 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)
坦率地说,这里发布的所有答案都在一个或另一个场景中,所以我会在这里提出看法。
关于我的具体问题,正确看待它的方法是,如果你实现自己的广播接收器,只要你收到推送就会调用它,无论什么代码在里面,它都会被执行。为了确保您看到通知,有两件重要的事情:
很大程度上取决于您发送通知的方式。因此,请确保警报,数据,有时正确提及活动。