我希望我不会这样做,但过去两天我一直在用一些看起来非常简单的东西来破坏我的头脑。我已经按照google和vogella的教程实现了我的C2DM应用程序客户端+服务器。
我将尝试简要描述我的问题:
所以我认为我的问题很可能是我的接收器用于消息,因为它们是从我的第三方服务器发送到C2DM服务器,但无法从那里到达我的应用程序。
我在StackOverflow上的相关主题上读到了问题可能与设备上的端口有关,但我目前使用相同的接收器来注册应用程序和接收消息,并且注册部分每次都有效。
这是我的接收者:
public class C2DRegistrationReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action != null){
if (action.equals("com.google.android.c2dm.intent.REGISTRATION")){
// do something
}
else if (action.equals("com.google.android.c2dm.intent.RECEIVE")){
// do something else
}
}
}
}
我的清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ro.raullepsa.coder"
android:versionCode="1"
android:versionName="1.0" >
<!-- SDK min version -->
<uses-sdk android:minSdkVersion="8" />
<!-- Only this application can receive the messages and registration result -->
<permission android:name="ro.raullepsa.coder.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="ro.raullepsa.coder.permission.C2D_MESSAGE" />
<!-- This app has permission to register and receive messages from Google's c2dm -->
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<!-- Permission to use internet -->
<uses-permission android:name="android.permission.INTERNET" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<!-- Activities -->
<activity
android:name="ro.raullepsa.coder.activity.MainActivity"
android:label="@string/app_name"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="ro.raullepsa.coder.activity.RegistrationResultActivity" />
<activity android:name="ro.raullepsa.coder.activity.MessageReceivedActivity" />
<receiver
android:name="ro.raullepsa.coder.util.c2d.C2DRegistrationReceiver"
android:permission="com.google.android.c2dm.permission.SEND">
<!-- Receive messages -->
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<category android:name="ro.raullepsa.coder" />
</intent-filter>
<!-- Receive the registration id -->
<intent-filter>
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="ro.raullepsa.coder" />
</intent-filter>
</receiver>
</application>
</manifest>
我没有错误,我已经反复尝试重新安装应用程序,重新注册,我已尝试使用2个独立的接收器,我已手动强制停止从C2DM运行的所有服务并重新安装,但仍然没有。
我已经尝试在调试模式下等待接收器的第一行,并且它在注册时到达,但从我从服务器发送消息之后从未到过。
我有点卡住了,会感激任何帮助。如果需要,我可以提供更多代码,尽管我的应用程序基本上是Lars Vogel's tutorial。我错过了什么?
答案 0 :(得分:1)
现在一切正常。只要我发送消息,我就会自动进入设备。 (是的,我的Wifi也在昨晚)
我不确定导致延迟的原因,因为我从Google服务器收到了积极的响应代码,但我的设备上没有任何内容。发送第一条消息可能需要一些时间吗?我不确定。
我试过其他Wifi网络,它也有效。希望我不再碰到这个了。不过,我发现这种行为有些奇怪。
答案 1 :(得分:1)
GCM通知作为背景数据发送到您的设备。
启用您在
中的背景数据设置&gt;帐户和同步&gt;背景数据