1

私はPHPにかなり慣れていないので、この大きな時間で立ち往生しています。

このインスタンスでエラー メッセージ " InvalidRegistration " を抽出しようとしています。これは、配列内の配列にあるように見えます。次に、PHP サーバーでフィルター処理して処理します。

複数の regId へのマルチキャスト メッセージでは、エラー配列の深さが 1 より大きい場合があることに注意してください。

どんな助けでも大歓迎です、ありがとう!


ダンプされた GCM サーバーの応答:

object(stdClass)#3 (5) { ["multicast_id"]=> int(6225919148914620552) ["成功"]=> int(0) ["失敗"]=> int(1) ["canonical_ids"]=> int(0) ["results"]=> array(1) { [0]=> object(stdClass)#4 (1) { ["error"]=> string(19) " InvalidRegistration " } } }

メッセージコードを送信:

    $dbf = new push_db_functions();  

    // a row id which contains an intentionally bad regId
    // to trigger the error from 'test' mySql database
    $id = '19'; 

    $result = $dbf->sendMessage($id);

    // dump GCM server response  
    $obj2 = json_decode($result);  
    var_dump($obj2);

   // TODO: (Question Subject)
   // how to extract and test for if('failure' == 1) { ...?
   // and then how to extract 'error' message so I can act upon it appropriately?

メッセージ ヘルパー コードを送信します。

public function sendMessage($id) {
    $sqlquery = "SELECT regid FROM test WHERE Id = '$id'";
    $results = mysql_query($sqlquery);
    $processed = mysql_fetch_row($results);
    $url = 'https://android.googleapis.com/gcm/send';
    $apiKey = "my api key";
    $message = "Hello World";
    $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;
}

4

2 に答える 2

1

JSON の単純なデコード応答

$data = json_decode($response);

この場合の出力

 
{
    "multicast_id": 5020929399500020011,
    「成功」: 0,
    「失敗」:1、
    "canonical_ids": 0,
    "結果": [{
        「エラー」:「未登録」
    }]
}

これで、エラーを簡単に解析して json にすることができます。

これが皆さんのお役に立てば幸いです。

于 2014-07-07T04:33:37.680 に答える
0

指定されたエラーコードを取得するには、次を使用できるはずです

$obj2->results[0]->error;

しかし、柔軟にやりたい場合は、次のようなことをもっとやりたいと思うかもしれません...

$errors = array();

if( !empty($obj2->results) ) {
    foreach( $obj2->results as $result ) {
        $error = $result->error;
        // Do whatever you want with the error here. 
        // In this instance, I'm just putting it into a fancy array
        $errors[] = $error;
    }
}

// $errors = array( [0] => 'InvalidRegistration' );
于 2012-11-13T01:40:16.783 に答える