0

このコードを使用して、C2DM プッシュ メッセージングのアプリケーション サーバー部分をセットアップしようとしています - https://github.com/lytsing/c2dm-php

アプリ側の作業を完了し、Google にメール アドレスを登録しました。(php/cURL がインストールされたサーバーで) コードを実行するたびに、「get auth token エラー」というエラーが表示されます。どこから問題を解決し始めればよいのかわからないので、気が狂いそうになります。

コードで変更したのは、s2dm.php ファイル内の行のみです。

  'source'        => 'com.phonegap.chillimusicapp', 

メールアドレスとパスワードを post.php ファイルに追加しました -

  $result = $c2dm->getAuthToken("email@googlemail.com", "password");

どんなアドバイスも素晴らしいでしょう!乾杯ポール

4

1 に答える 1

1

以下のサンプル コードを使用してみてください。正常に動作しています。

<?php
define("C2DM_ACCOUNT_EMAIL","[C2DM_EMAIL]");
define("C2DM_ACCOUNT_PASSWORD","[C2DM_PASSWORD]");
define("C2DM_CLIENT_LOGIN_URL","https://www.google.com/accounts/ClientLogin");
define("C2DM_MSG_SEND_URL","https://android.apis.google.com/c2dm/send");

function sendPushNotification($device_reg_id,$msg){

    $auth_id=get_auth_id(); // To get Auth ID

    $post_fields=array(
        'collapse_key=ck_1',
        'registration_id='. trim($device_reg_id),
        'data.payload='. trim($msg),
    );

    $data_str=implode('&', $post_fields);

    $headers = array(
    'Authorization: GoogleLogin auth='.trim($auth_id),
    'Content-Type: application/x-www-form-urlencoded',
    'Content-Length: '.trim(strlen($data_str)),
    'Connection: close'
    );

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,C2DM_MSG_SEND_URL);
    curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_str);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $server_output = curl_exec ($ch);
    curl_close ($ch);
//  print_r($server_output);
}

function get_auth_id(){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,C2DM_CLIENT_LOGIN_URL);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "Email=".C2DM_ACCOUNT_EMAIL."&Passwd=".C2DM_ACCOUNT_PASSWORD."&accountType=GOOGLE&source=Google-cURL-Example&service=ac2dm");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $server_output = curl_exec ($ch);
    curl_close ($ch);
//  print_r($server_output);
    $parts=explode("Auth=",$server_output);
    $auth_id=$parts[1];
//  echo $auth_id;
    return $auth_id;
}

$reg_id = "[DEVICE_REG_ID]";
sendPushNotification($reg_id,"Hello World...!! Jay is testing C2DM...");

ご参考までに!通知を送信するたびに get_auth_id() を呼び出す必要はありません。一度呼び出して、構成ファイルのどこかに auth_id を保存することもできます。

于 2012-06-13T12:03:52.567 に答える