0

ここからGoogleGCMテストコードを実行しており、エミュレーターと電話の両方で実行されますが、メッセージの送信を行うと、通知はエミュレーターでのみ機能し、電話では機能しません。

GCMIntentService通知

import android.support.v4.app.NotificationCompat;
...

// issues a notification to inform the user that server has sent a message
private void generateNotification(Context context, String message) {
    NotificationCompat.Builder builder = new NotificationCompat.Builder(context).setSmallIcon(R.drawable.ic_launcher)
            .setTicker(context.getString(R.string.app_name)).setContentText(message);

    Intent notificationIntent = new Intent(context, Main.class);
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    builder.setContentIntent(contentIntent);

    // add notification
    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    manager.notify(FM_NOTIFICATION_ID, builder.build());
}

PHPメッセージ送信および送信機能

require_once 'push_db_functions.php';
$dbf = new push_db_functions();
$id = '40';
$message = "Test Message";

$response = $dbf->sendMessage($id, $message);
$response = json_decode($response);
print_r($response);

public function sendMessage($id, $message) {
    $results = mysql_query("SELECT regid FROM test WHERE id = '$id'");
    $processed = mysql_fetch_row($results);
    $url = 'https://android.googleapis.com/gcm/send';
    $apiKey = "AIzaSyD-xxx";
    $fields = array('registration_ids' => $processed, 'data' => array( "message" => $message),);
    $headers = array('Authorization: key=' . $apiKey, 'Content-Type: application/json');

    // open connection
    $ch = curl_init();
    // set the url, number of POST vars, POST data
    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));
    // execute post
    $response = curl_exec($ch); 
    curl_close($ch);
    return $response;
}

メッセージ応答を送信する

stdClass Object ( [multicast_id] => 5036849453049739126 [success] => 1 [failure] => 0 [canonical_ids] => 0 [results] => Array ( [0] => stdClass Object ( [message_id] => 0:1353799902066759%04108f12f9fd7ecd ) ) ) success

データベースに2つのregIdレコードがあります。1つはエミュレーター用で、もう1つは電話$ id 39および40用であり、いずれかのデバイスにメッセージを送信するように変更します。

データベースレコード

id | regid
39 | APA91bFyMJx4b0ddI........ Emulator
40 | APA91bFhwEhHOClkg........ Phone

電話はジンジャーブレッドを実行しており、プログラムはメッセージ受信時に通知を表示しないことを除いて、登録して正しく実行します。

    mDisplay = (TextView) findViewById(R.id.display);
    registerReceiver(mHandleMessageReceiver, new IntentFilter(DISPLAY_MESSAGE_ACTION));
    final String regId = GCMRegistrar.getRegistrationId(this);
    Log.d("registrationID", "::" + regId);
    if (regId.equals("")) {
        // automatically registers application on startup.
        GCMRegistrar.register(this, SENDER_ID);
    }

どんな助けでも大歓迎です。

ありがとう

4

1 に答える 1

0

この質問に答えてくれた皆さん、ありがとうございます。

問題を解決しました:

[アカウントと同期] の [一般的な同期設定] の下の携帯電話で、[バックグラウンド データの同期] ボックスがチェックされていないことがわかりました。設定すると、すべて正常に動作します。

質問する前にこれを理解するべきでした、申し訳ありません。

ただし、この回答が他の人の助けになることを願っています。

于 2012-11-25T04:49:21.593 に答える