나는이 문제에 익숙해지기를 기대했지만, 지난 2 일 동안 내 머리를 꽤 단순 해 보이는 것으로 끝장 냈습니다. 이미 google 및 vogella에서 자습서를 따라 내 C2DM 응용 프로그램 클라이언트 + 서버를 구현했습니다.C2DM - 메시지가 서버에서 성공적으로 전송되었지만 기기에 표시되지 않음
나는 잠시 내 문제를 설명하려고합니다 :
- 내 클라이언트 응용 프로그램 이 성공적으로가 가을 registrationId받습니다.
- 내 서버 은 인증 토큰을 수신합니다.
- 서버가 인증 토큰 및 해당 장치의 registrationId을 사용하여 메시지를 보냅니다.
- 서버에서 클라이언트로 메시지를 보낼 때 성공한 메시지 응답 코드 (예 : 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
}
}
}
}
내 매니페스트 파일 : 여기
내 수신기
<?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>
내가 오류를 얻을
, 나는 응용 프로그램을 다시 설치해서 또 다시 시도했다, 다시 등록, I 2 개의 별도 리시버로 시도했지만 C2DM에서 실행중인 모든 서비스를 수동으로 강제 중지하고 다시 설치했지만 아직 아무것도하지 않았습니다.수신자의 첫 번째 줄에서 대기하도록 디버그 모드에서 시도했지만 등록 할 때 도착하지만 결코 서버에서 메시지를 보낸 후에는 수신하지 않습니다.
나는 꼼꼼하고 도움이된다. 필요한 경우 더 많은 코드를 제공 할 수 있지만 기본적으로는 Lars Vogel's tutorial입니다. 내가 뭘 놓치고 있니?
가 다른 장치에서 봤어> 계정 및 동기화> 백그라운드 데이터에 당신의 배경 데이터를 사용 하시겠습니까? –
그건 실제로 내 계획 이었지만, 이것을 지원할 다른 안드로이드 장치가 없었습니다. 내가 관리 할 수 없다면, 나는 친구의 장치를 빌려서 그의 것을 시도 할 것이다. –
문제를 좁히고 하나의 장치로 문제를 배제하는 데 도움이되므로 중요한 단계라고 생각합니다. 또한 다른 네트워크 (와이파이 대신 3G)에서 시도해보십시오. - 일부 네트워크에서는 C2DM 메시지가 도착하지 않는 것으로 나타났습니다. (그래도 등록 할 수는 있지만 문제는 아닙니다.) –