我在我的应用中配置了Parse API,除了推送通知外,一切正常。我试图从网站发送它们但他们没有到达应用程序。 我按照documentation中的说法执行了所有操作,但我无法接收通知推送。
我能够收到一个,当我按下它时,应用程序崩溃了。现在我试图改变一些东西,但即使有倒车,我也不能再收到它们了。我该如何解决我的问题?
编辑:由于某些用户可能感兴趣,这里是我用于推送通知的代码部分:
主类(不是MainActivity):
public class InstantsApplication extends Application {
public void onCreate() {
super.onCreate();
// Hidden
Parse.initialize(this, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
ParseInstallation.getCurrentInstallation().saveInBackground();
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);
}
}
}
}
AndroidManifest(此处不包括权限,请相信我,我已经把它们放了):
<!-- PARSE -->
<service android:name="com.parse.PushService" />
<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" />
<!--
IMPORTANT: Change "com.parse.tutorials.pushnotifications" to match your app's package name.
-->
<!-- I have hidden package name root for this question -->
<category android:name="com.xxxxxxxx.instants" />
</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>
</application>
答案 0 :(得分:4)
之前我遇到过这个问题,因为你使用的是最新的Parse api。 您需要进行一些更改。
首先,要修复因从Parse后端发出推送而直接导致的错误,您需要在Manifest中为Parse推送声明一个通知图标。
<meta-data android:name="com.parse.push.notification_icon"
android:resource="@drawable/ic_launcher"/>
在结束申请之前使用-Tag。
现在从后端发出另一个推送将按预期给出推送通知。到现在为止还挺好。单击推送将导致应用程序再次崩溃。要解决此问题,您需要删除现已弃用的调用PushService.setDefaultPushCallback(...)
并添加您自己的Receiver类。我在* .util包中做了这个,如下所示:
public class Receiver extends ParsePushBroadcastReceiver {
@Override
public void onPushOpen(Context context, Intent intent) {
Intent i = new Intent(context, MainActivity.class);
i.putExtras(intent.getExtras());
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
接下来,将默认的Parse接收器更改为刚创建的接收器: - 转到Manifest文件。
<receiver
android:name="your.package.name.utils.Receiver"
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>