无法从 Parse.com 发送推送

Can't send push from Parse.com

我的应用程序中有一个使用 Parse 的项目,但我更改了项目(以及密钥)并且我的推送(测试或正常)没有从 Parse 发送。

当我尝试发送它们时,我收到通知说它将被 2 个收件人接收:

我的客户端推送已启用:

虽然我认为不需要,但我有我的 GCM 证书:

我在 AndroidManifest.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" />

<permission android:protectionLevel="signature"
    android:name="taggie.me.permission.C2D_MESSAGE" />
<uses-permission android:name="taggie.me.permission.C2D_MESSAGE" />

我的申请是:

<application
    android:name=".MainApplication"
    android:allowBackup="true"
    android:icon="@drawable/logo_help"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

哪个代码是:

public class MainApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        Parse.initialize(this, "YBi4ki505TcwKSNEIW7gkFCdWvjHC9yNJmrZHBGR", "APwUw3laazYRhvkSRwZZqpxsROUjH5jWP6QzeHiq");
        ParseInstallation.getCurrentInstallation().saveInBackground();
    }
}

我剩下的 AndroidManifest.xml 是:

    <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" />

            <category android:name="taggie.me" />
        </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>

    <meta-data android:name="com.parse.push.gcm_sender_id"
        android:value="id:10321_and_the_rest_of_my_number" />; 

但是问题就在这里

我没有收到通知,当我发送通知时我可以看到:

在开枪自杀之前有人知道吗?谢谢:)


太棒了,我试过将 apk 发送给我的一个朋友...他收到了推送通知,但我没有!为什么可能?


我刚刚打开了 8253 端口,因为我看到一些帖子报告了这一点,但它仍然无法正常工作。 :'(

我有一个类似的问题,但以一种奇怪的方式解决了,但仍然 - 可能有帮助:

如果您在设备上重新安装(实际上是重新部署,有时只是 运行 在现有 apk 上卸载)您的应用程序,它可能会为指向相同实际的设备令牌创建多个条目设备(在 Parse 仪表板内,转到核心,您可以在那里看到完整的 table),在这种情况下 - 系统并不总是知道哪个是正确的物理设备。

这可以解释:

一个。仪表板告诉您它将发送超过 1 条消息(假设只发送 1 条消息)。

b。您的朋友收到推送(他只有 1 个有效设备令牌)

无论如何 - 核心页面上的刷新按钮没有帮助,但是 - 从仪表板手动发送推送会导致设备收到多次推送(因为它在 table),然后,重新进入核心 table 页面将自动清除重复项。 从那时起 - 推动恢复正常。 您可能需要在设备上再次进行彻底、彻底的删除和重新安装。

希望对您有所帮助!

注意:在我的案例中不需要 GCM 凭据。

主要问题是我在使用 Genymotion。

作为模拟器,推送通知应该到达或根本不到达,但它们有时会到达。我无法解释为什么。

在您的 parseApplication class 中声明频道。如果您要发送通知,则必须设置频道。看到这个 ParsePush.subscribeInBackground 。它正在描述频道。

public class ParseApplication 扩展应用程序 {

@Override
public void onCreate() {
    super.onCreate();
    System.out.println("Application");
    Parse.initialize(this, "86q5mwgypd1Q2URFV6kJh5MBPmUpuPvoN3lTdeWx", "OhrkrJTuTwtbMprYtiywnQ3f4wnQdr5pitmI7tNt");

    ParsePush.subscribeInBackground("temboo", 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);
                Toast.makeText(ParseApplication.this, "Failed to subscribe for push.", Toast.LENGTH_SHORT).show();
            }
        }
    });

这对我有用。

  Parse.enableLocalDatastore(this);

    // Add your initialization code here
    Parse.initialize(this, APP_ID, CL_ID);
    ParseInstallation.getCurrentInstallation().saveInBackground();

    ParseUser.enableAutomaticUser();
    ParseACL defaultACL = new ParseACL();
    // Optionally enable public read access.
    // defaultACL.setPublicReadAccess(true);
    ParseACL.setDefaultACL(defaultACL, true);



    // IF NEEADED
    String topic ="YOUR_TOPIC";
    System.out.println(topic);
    ParsePush.subscribeInBackground(topic, new SaveCallback() {
        @Override
        public void done(ParseException e) {
            if (e == null) {
                Log.d("com.parse.push",
                        "successfully subscribed ");
            } else {
                Log.e("com.parse.push", "failed ", e);
            }
        }
    });