gpt4 book ai didi

java - C2DM - 消息从服务器成功发送,但未显示在设备上

转载 作者:行者123 更新时间:2023-11-29 22:08:06 25 4
gpt4 key购买 nike

我希望我不会遇到这个问题,但在过去的 2 天里,我一直在为一些看起来非常简单的事情而绞尽脑汁。我已经按照 google 中的教程实现了我的 C2DM 应用程序客户端 + 服务器。和 vogella .

我将尝试简要描述我的问题:

  1. 我的客户端应用程序成功收到了它的registrationId
  2. 我的服务器成功接收到它的身份验证 token
  3. 服务器使用其身份验证 token 和设备的registrationId 发送消息。
  4. 当从服务器向客户端发送消息时,我得到一个成功的消息响应代码(例如 id=0:1335303367614556%fd55792500000030 响应代码:200,根据 Google 关于 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
}
}
}
}

我的 list 文件:

<?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 运行的所有服务并重新安装,但仍然没有。

我试过在 Debug模式下等待接收器的第一行,它在注册时到达那里,但在我从服务器发送消息后就再也没有了。

我有点卡住了,希望得到任何帮助。如果需要,我可以提供更多代码,尽管我的应用程序基本上是 Lars Vogel's tutorial .我错过了什么?

最佳答案

嗯,有趣的事情发生了。虽然我没有对前一天晚上的代码进行任何更改,但是当我今天早上醒来并打开 Wifi 时,我收到了一条消息。

现在一切正常。只要我发送一条消息,我就会自动进入设备。 (是的,昨晚我的 Wifi 也打开了)

我不确定是什么导致了延迟,因为我收到了来自 Google 服务器的肯定响应代码,但我的设备上没有任何响应。发送第一条消息可能需要一些时间?我不确定。

我在其他 Wifi 网络上试过,它也能正常工作。希望我不会再碰到这个了。尽管如此,我还是觉得这种行为有些奇怪。

关于java - C2DM - 消息从服务器成功发送,但未显示在设备上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10306630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com