2013-11-26 2 views
2

Итак, у меня была проблема в течение последних 15 часов или около того, я последовал за началом работы GCM для Android (включая клиентский демо-источник), и насколько я знаю, m должен получать push-уведомление вскоре после регистрации устройства и после отправки сообщения ECHO_NOW. Вот что я сделал, и некоторые фрагменты кода:Клиент Android для GCM не получает эховое push-уведомление

Я бежал код в HTC One (4,3)

  • тщательно Последовал официальную документацию и создали приложение делает использование сервисов Google Play lib (froyo package)
  • Я создал и объявил основной Activity, IntentService и удлиненный приемник WakefulBroadcastReceiver.
  • Я проверил GCM Console, у меня есть правильный идентификатор отправителя, Enabled push notif для устройств 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> 

я сделал предположение, что я хотел бы получить толчок уведомление после прочтения этого (включен в исходный код для гсм клиента демонстрационной реализации):

// 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. 

С первой попытки устройства успешно регистрируют и получают идентификатор регистрации.

Вопрос

ли я сделать ошибочное предположение и не толчок уведомление должно быть получено? Если нет, что может быть неправильным?

Я документировал как можно больше, должен ли я размещать больше кода? Я проверил столько вопросов, и никто не справился с этой точной проблемой или просто не исправит это.

Заранее благодарим сообщество.

С уважением,

Armando

EDIT: Вывод: GCM Demo Client работает отлично, просто необходимо иметь в виду, что конечный сервер необходимо запросить GCM отправить фактический толчок уведомление. ECHO_NOW не означает, что GCM будет отправлено от вашего имени. Внедрите сервер!

Отмеченный ответ (Eran's) был первым, НО Rajat's обеспечивает фрагмент для тех, кто нуждается в головах. Спасибо вам обоим.

ответ

1

Приведенное вами приложение GCM Demo использует новое устройство для обмена облачными сообщениями (восходящими сообщениями) для отправки сообщения серверу и предполагает, что сервер повторяет это сообщение. Для этого вам следует реализовать серверную часть (которая должна установить соединение с сервером облачных соединений GCM). Для этого вам также потребуется заполнить форму, чтобы получить идентификатор проекта, белый для новых функций GCM.

Если вам не нужны новые функции GCM (устройство для облачных и пользовательских уведомлений), вы должны просто отправить идентификатор регистрации на свой сервер и отправить сообщение с сервера на ваше устройство.

Вы можете увидеть образцы требуемого кода на стороне сервера 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; 
?> 
Смежные вопросы