2015-10-17 8 views
0

Загружаю Google облачный обмен сообщениями с этого сайта. Sitegoogle cloud messaging дает null

Только если я запустил приложение в Genymotion, появится уведомление. Но не текст. уведомление дает Null.

У меня есть 2 gava-трансляции GavaBroadcastReceiver и GcmIntentService. , но я не знаю, где искать ошибку.

GcmIntentService:

package com.example.provenlogic1.myapplication; 
import android.app.IntentService; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.SystemClock; 
import android.support.v4.app.NotificationCompat; 
import android.support.v4.content.LocalBroadcastManager; 
import android.util.Log; 
import com.google.android.gms.gcm.GoogleCloudMessaging; 

public class GcmIntentService extends IntentService { 
public static final int NOTIFICATION_ID = 1; 
private NotificationManager mNotificationManager; 
NotificationCompat.Builder builder; 
String TAG="pavan"; 

public GcmIntentService() { 
    super("GcmIntentService"); 
} 

@Override 
protected void onHandleIntent(Intent intent) { 
    Bundle extras = intent.getExtras(); 
    GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this); 
    // The getMessageType() intent parameter must be the intent you received 
    // in your BroadcastReceiver. 
    String messageType = gcm.getMessageType(intent); 

    Log.d("pavan","in gcm intent message "+messageType); 
    Log.d("pavan","in gcm intent message bundle "+extras); 

    if (!extras.isEmpty()) { // has effect of unparcelling Bundle 
     /* 
     * Filter messages based on message type. Since it is likely that 
GCM 
     * will be extended in the future with new message types, just ignore 
     * any message types you're not interested in, or that you don't 
     * recognize. 
     */ 
     if (GoogleCloudMessaging. 
       MESSAGE_TYPE_SEND_ERROR.equals(messageType)) { 
      sendNotification("Send error: " + extras.toString()); 
     } else if (GoogleCloudMessaging. 
       MESSAGE_TYPE_DELETED.equals(messageType)) { 
      sendNotification("Deleted messages on server: " + 
        extras.toString()); 
      // If it's a regular GCM message, do some work. 
     } else if (GoogleCloudMessaging. 
       MESSAGE_TYPE_MESSAGE.equals(messageType)) { 

      String recieved_message=intent.getStringExtra("text_message"); 
      sendNotification("message recieved :" +recieved_message); 

      Intent sendIntent =new Intent("message_recieved"); 
      sendIntent.putExtra("message",recieved_message); 
      LocalBroadcastManager.getInstance(this).sendBroadcast(sendIntent); 
     } 
    } 
    // Release the wake lock provided by the WakefulBroadcastReceiver. 
    GcmBroadcastReceiver.completeWakefulIntent(intent); 
} 

// Put the message into a notification and post it. 
// This is just one simple example of what you might choose to do with 
// a GCM message. 
private void sendNotification(String msg) { 
    mNotificationManager = (NotificationManager) 
      this.getSystemService(Context.NOTIFICATION_SERVICE); 

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, 
      new Intent(this, MainActivity.class), 0); 

    NotificationCompat.Builder mBuilder = 
      new NotificationCompat.Builder(this) 
        .setSmallIcon(R.drawable.common_signin_btn_text_disabled_dark) 
        .setContentTitle("GCM Notification") 
        .setStyle(new NotificationCompat.BigTextStyle() 
        .bigText(msg)) 
        .setContentText(msg); 

    mBuilder.setContentIntent(contentIntent); 
    mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build()); 
} 
} 

GcmIntentService

package com.example.provenlogic1.myapplication; 
import android.app.Activity; 
import android.content.BroadcastReceiver; 
import android.content.ComponentName; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.content.WakefulBroadcastReceiver; 
import android.util.Log; 

import java.util.Iterator; 
import java.util.Set; 


public class GcmBroadcastReceiver extends WakefulBroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 

    // Explicitly specify that GcmIntentService will handle the intent. 
    ComponentName comp = new ComponentName(context.getPackageName(), 
      GcmIntentService.class.getName()); 
    // Start the service, keeping the device awake while it is launching. 
    startWakefulService(context, (intent.setComponent(comp))); 
    setResultCode(Activity.RESULT_OK); 
} 
} 

Выходной сигнал на Genymotion:

Genymotion screen

Вход:

10-17 12:29:25.998 12541-17229/com.example.provenlogic1.myapplication D/pavan: in gcm intent message gcm 
10-17 12:29:25.998 12541-17229/com.example.provenlogic1.myapplication D/pavan: in gcm intent message bundle Bundle[mParcelledData.dataSize=268] 
10-17 12:29:26.006 12541-17229/com.example.provenlogic1.myapplication I/pavan1: data =Bundle[{android.support.content.wakelockid=9, price=A test , collapse_key=do_not_collapse, from=693176399203}] 
10-17 12:29:26.010 12541-12541/com.example.provenlogic1.myapplication D/pavan: in local braod null 

цена = A тест

вот что отправлю.

+0

Не могли бы вы отобразить формат отправляемого вниз сообщения с сервера? Также посмотрите на ссылку здесь, где показан рекомендуемый способ сделать GCM на Android. https://github.com/googlesamples/google-services/tree/master/android/gcm/app/src/main/java/gcm/play/android/samples/com/gcmquickstart –

ответ

0

Вот строка вы должны смотреть на:

String recieved_message=intent.getStringExtra("text_message"); 
sendNotification("message recieved :" +recieved_message); 

recieved_message является недействительным, по некоторым причинам. Записывать данные

Log.d(LOG_TAG, "intent.getExtras() >> " + intent.getExtras().toString()); 

данные должны быть вашим JSON playload, и вам нужно разобрать, что правильно.

обновления вашего пост с этим журналом, может быть, я могу помочь вам в дальнейшем


Попробуйте это:

String receivedMessage = intent.getExtras().getString("text_message"); 
Log.d(LOG_TAG, "Received message >> " + receivedMessage); 
+0

также не работает. Дает полученное сообщение >> null В логах. – user3819560

+0

@ user3819560 как насчет 'intent.getExtras() >>' – meda

+0

Дает это. 10-17 12: 50: 56.790 1575-1759/com.example.provenlogic1.myapplication D/pava22: intent.getExtras() >> Bundle [{android.support.content.wakelockid = 1, from = 693176399203, collapse_key = do_not_collapse, price = A test}] – user3819560

0

я, что в моем проекте, проблема в кодах ServerSide, если его PHP, изменить коды с этим

array("message" => $message) 

$greetMsg = $_POST['message']; 

$message = $respJson; 

<?php 
 
\t //Generic php function to send GCM push notification 
 
    function sendPushNotificationToGCM($registation_ids,$message) { 
 
\t \t //Google cloud messaging GCM-API url 
 
     $url = 'https://gcm-http.googleapis.com/gcm/send'; 
 
     $fields = array(
 
      'registration_ids' => $registation_ids, 
 
      'data' => array("message" => $message), 
 
     ); 
 
\t \t // Update your Google Cloud Messaging API Key 
 
\t \t if (!defined('GOOGLE_API_KEY')) { 
 
\t \t \t define("GOOGLE_API_KEY", ""); \t \t 
 
\t \t } 
 
     $headers = array(
 
      'Authorization: key=' . GOOGLE_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); 
 
\t \t curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); \t 
 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
 
     curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); 
 
     $result = curl_exec($ch); \t \t \t \t 
 
     if ($result === FALSE) { 
 
      die('Curl failed: ' . curl_error($ch)); 
 
     } 
 
     curl_close($ch); 
 
     return $result; 
 
    } 
 
?> 
 
<?php 
 
include_once 'db_functions.php'; 
 
    $db = new DB_Functions(); 
 
    $selUsers = $_POST['sendmsg']; 
 
    if(empty($selUsers)) 
 
    { 
 
    echo("You didn't select any users."); 
 
    } 
 
    else 
 
    { 
 
\t $resp = "<tr id='header'><td>GCM Response [".date("h:i:sa")."]</td></tr>"; 
 
    $userCount = count($selUsers); 
 
\t $greetMsg = $_POST['message']; 
 
\t $respJson = $greetMsg; 
 
\t $registation_ids = array(); 
 
\t for($i=0; $i < $userCount; $i++) 
 
    { 
 
\t  $gcmRegId = $db->getGCMRegID($selUsers[$i]); 
 
\t \t $row = mysql_fetch_assoc($gcmRegId); 
 
\t \t //Add RegIds retrieved from DB to $registration_ids 
 
\t \t array_push($registation_ids, $row['gcm_regid']); 
 
    } 
 
\t // JSON Msg to be transmitted to selected Users 
 
\t $message = $respJson; 
 
\t $pushsts = sendPushNotificationToGCM($registation_ids, $message); 
 
\t $resp = $resp."<tr><td>".$pushsts."</td></tr>"; 
 
\t echo "<table>".$resp."</table>"; 
 
    } 
 

 
?>