无法从Parse.com发送推送

时间:2015-05-15 20:23:56

标签: android parse-platform push-notification push

我在我的应用程序中有一个Parse的项目,但是我已经改变了项目(以及键),而我的推送(测试或正常)并没有从Parse发送。

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

enter image description here

我的客户端推送已启用:

enter image description here

虽然我认为不需要,但我已获得GCM凭据:

enter image description here

  • 我尝试在Android上扩展自定义<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" >
  • 我已尝试签名发布和调试。
  • 我尝试过使用Wi-Fi,3G和4G。
  • 我已尝试清除数据,卸载应用,重新启动。

我对AndroidManifest.xml的权限是:

public class MainApplication extends Application {

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

我的申请是:

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

代码是:

PUBLIC CONST APP_NAME As String = "SQL Bluescreen demonstrator"

我的AndroidManifest.xml的其余部分是:

#If VBA7 And Win64 Then ' 64 bit Excel under 64-bit windows: PtrSafe declarations and LongLong Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongLong) #ElseIf VBA7 Then ' VBA7 in a 32-bit environment: PtrSafe declarations, but no LongLong Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #Else ' 32 bit Excel Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #End If

问题在这里

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

enter image description here

有人在拍摄自己之前有线索吗?谢谢:))

这太不可思议了,我试图将apk发送给我的一个朋友......他得到了推送通知,但我不知道!为什么会这样呢?

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

4 个答案:

答案 0 :(得分:2)

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

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

这可以解释:

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

湾你的朋友获得推送(他只有一个有效的设备令牌)

无论如何 - 核心页面上的刷新按钮没有帮助,但是 - 手动从仪表板发送推送会导致设备接收多次推送(表中的重复次数),以及然后,重新进入Core表页面将自动清除重复项。 从那里 - 推动恢复正常。 您可能需要在设备上进行另一次干净,完全删除和重新安装。

希望这有帮助!

注意:在我的情况下,GCM凭证是必需的。

答案 1 :(得分:0)

主要问题是我正在使用Genymotion。

作为模拟器,推送通知应该是ARRIVE或NOT ARRIVE,但它们有时会到达。我无法解释原因。

答案 2 :(得分:0)

在parseApplication类中声明通道。如果您要发送通知,则必须设置频道。请参阅此ParsePush.subscribeInBackground。它正在描述频道。

公共类ParseApplication扩展了Application {

@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();
            }
        }
    });

答案 3 :(得分:0)

这适合我。

  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);
            }
        }
    });