【问题标题】:Can't send push from Parse.com无法从 Parse.com 发送推送
【发布时间】:2015-07-27 21:18:16
【问题描述】:

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

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

我的客户端推送已启用:

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

  • 我尝试过在 Android 上扩展自定义 ParsePushBroadcastReceiver 并记录 onReceive
  • 我已尝试签名为发布和调试。
  • 我尝试过使用 Wi-Fi、3G 和 4G。
  • 我已尝试清除数据、卸载应用、重新启动。

我对 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 端口,因为我看到一些帖子报告了这个问题,但它仍然无法正常工作。 :'(

【问题讨论】:

    标签: android parse-platform push-notification push


    【解决方案1】:

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

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

    这或许可以解释:

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

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

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

    希望对您有所帮助!

    注意:在我的情况下,不需要 GCM 凭据。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        公共类 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();
                    }
                }
            });
        

        【讨论】:

          【解决方案4】:

          这对我有用。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-01-22
            • 1970-01-01
            • 2015-01-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多