2013-11-26 5 views
2

지난 15 시간 동안 문제가 발생했습니다. GCM이 Android (클라이언트 데모 소스 포함)를 시작한 것을 알고 있으며, 장치를 등록하고 ECHO_NOW 메시지를 보낸 후 곧 푸시 알림을받을 예정입니다. 여기에 내가 무슨 짓을했는지 일부 코드 조각입니다 : 내가 HTC의 코드를 실행 한GCM 용 Android 클라이언트가 푸시 알림을 수신하지 않음

  • 하나 (4.3)

    철저하게 공식 문서를 이어와 Google의 사용을 만드는 응용 프로그램을 만들어 Play 서비스 lib (froyo package)
  • 메인 Activity, IntentServiceWakefulBroadcastReceiver 확장 수신기를 만들고 선언했습니다.
  • 앱 패키지와 함께 GCM 콘솔을 확인했는데 올바른 발신자 ID, Android 기기에 사용 설정 푸시 알림, 지문 및 디버그 키 저장소를 확인했습니다.
  • 필자는 올바른 사용 권한을 추가했으며 사용 권한 전체에서 적절한 패키지를 사용하고 Intent 작업을 수행하도록했습니다.

의 AndroidManifest.xml :

:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="my.package" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="19" /> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 

    <permission android:name="my.package.permission.C2D_MESSAGE" 
     android:protectionLevel="signature" /> 
    <uses-permission android:name="my.package.permission.C2D_MESSAGE" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 

     <activity 
      android:name="my.package.MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <receiver 
      android:name="my.package.GcmBroadcastReceiver" 
      android:permission="com.google.android.c2dm.permission.SEND" > 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <category android:name="my.package" /> 
      </intent-filter> 
     </receiver> 

     <service android:name="my.package.GcmIntentService" /> 

    </application> 
</manifest> 

는 내가합니다 (GCM 클라이언트 데모 구현을위한 소스 코드에 포함)이를 읽은 후 푸시 알림을받을 것이라고 가정했다

// For this demo: we don't need to send it because the device 
// will send upstream messages to a server that echo back the 
// message using the 'from' address in the message. 

처음 시도한 이후로 장치는 등록 ID를 등록하고 획득하는 데 성공했습니다.

상담자 잘못된 가정없이 푸시 알림을 했습니까

수신해야 하는가? 그렇지 않다면 무엇이 잘못 될 수 있습니까?

더 많은 코드를 게시해야합니까? 나는 많은 질문을 체크했는데 아무도이 정확한 문제를 해결하지 못했거나 해결하지 못했다.

미리 커뮤니티에 감사드립니다. 감사합니다

,

아르

편집 : 결론 : GCM 데모 클라이언트는 단지 서버 측이 실제 푸시 알림을 보내도록 GCM을 요청하기 위해 필요하다는 것을 명심해야 완벽하게 작동합니다. ECHO_NOW는 귀하를 대신하여 GCM에서 무언가를 보내 겠다는 의미는 아닙니다. 서버 측 구현!

표시된 답변 (Eran 's)이 첫 번째 것이었지만 Bat Rajat 's는 머리를 필요로하는 사람을위한 스 니펫을 제공합니다. 둘 다 고마워.

답변

1

GCM 데모 앱에서 새 기기를 사용하여 클라우드 메시징 (업스트림 메시지)을 사용하여 서버에 메시지를 보내면 서버가 해당 메시지를 다시 에코한다고 가정합니다. 이를 작동 시키려면 서버 측 (GCM 클라우드 연결 서버에 연결해야 함)을 구현해야합니다. 또한 새 GCM 기능에 대해 프로젝트 ID가 흰색으로 표시되도록 양식을 작성해야합니다.

새로운 GCM 기능 (기기 대 클라우드 및 사용자 알림)이 필요하지 않은 경우 서버에 등록 ID를 보내고 서버에서 기기로 메시지를 보내면됩니다.

필요한 서버 측 코드 here의 샘플을 볼 수 있습니다.

6

장치에 알림을 보내려면 서버 측 코드를 구현하십시오. 자세한 내용은 Android GCM tutorial을 참조하십시오.

<?php 
    $api_key = "AIzBpx4XbXwKd8P-v2d1Jk"; 
    $registrationIDs = array("APA91b3Rjlo8T_URx15NqvxY2mRyQ"); 
    $message = "congratulations"; 
    $url = 'https://android.googleapis.com/gcm/send'; 
    $fields = array(
       'registration_ids' => $registrationIDs, 
       'data'    => array("message" => $message), 
       ); 

    $headers = array(
        'Authorization: key=' . $api_key, 
        'Content-Type: application/json'); 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); 
    $result = curl_exec($ch); 
    curl_close($ch); 

echo $result; 
?> 
관련 문제