Parse.com-Android中的推送通知配置问题



我正在尝试根据文档设置Parse.com推送通知:

我的清单xml有以下相关条目:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.hello.world"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="17" />
....
    <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.VIBRATE" />
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
    <!-- NOTE THIS NEXT LINE -->
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
    <permission
        android:name="com.hello.world.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />
    <uses-permission android:name="com.hello.world.permission.C2D_MESSAGE" />
....
        <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.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>
        <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="com.hello.world" />
            </intent-filter>
        </receiver>
    </application>

如上所述,在清单中添加parse.com推送相关配置后——应用程序已停止工作——它只是在启动时挂起,我看不到第一个屏幕。

编辑1

调试后,我发现应用程序在尝试第一次调用Parse:时挂起

ParseQuery<ParseObject> query = ParseQuery.getQuery("myclass");
List<ParseObject> myclassresult = query.find();//App Hangs at THIS line

为什么只有添加Parse.com推送配置时才会出现这种情况
这条线和应用程序在没有Parse.com推送配置的情况下运行良好

(还要注意,我还没有在Parse.com上为应用程序做任何特定的配置来启用推送,我使用的是普通的Parse.com sdk,而不是任何用于推送通知的特殊sdk)

编辑2

当我查看相关线程(AsyncTask#1)堆栈跟踪时,我看到以下内容:

  at java.lang.Object.wait(Native Method)   
  at java.lang.Object.wait(Object.java:364) 
  at bolts.Task.waitForCompletion(Task.java:119)    
  at com.parse.Parse.waitForTask(Parse.java:721)    
  at com.parse.ParseUser.getCurrentUser(ParseUser.java:1044)    
  at com.parse.ParseQuery.getUser(ParseQuery.java:298)  
  at com.parse.ParseQuery.findInBackground(ParseQuery.java:892) 
  at com.parse.ParseQuery.find(ParseQuery.java:529) 
  at com.hello.world.MyQueryClass.getDataFromParse(MyQueryClass.java:..)    
  ...

解决方案是卸载应用程序,然后重新安装。仅仅在现有应用程序上重新安装是不起作用的,反而会导致奇怪的行为!

如果有人知道原因,请发表评论。

最新更新