2

PHPサーバーページからJAXLを使用してAndroidクライアントにデータを正常に送信しました..

Google Cloud Message の公式ウェブサイトのガイドを注意深く読みました。Upstream については、次のドキュメントのみがあります。

public void onClick(final View view) {
    if (view == findViewById(R.id.send)) {
        new AsyncTask() {
            @Override
            protected String doInBackground(Void... params) {
                String msg = "";
                try {
                    Bundle data = new Bundle();
                    data.putString("my_message", "Hello World");
                    data.putString("my_action","SAY_HELLO");
                    String id = Integer.toString(msgId.incrementAndGet());
                    gcm.send(SENDER_ID + "@gcm.googleapis.com", id, data);
                    msg = "Sent message";
                } catch (IOException ex) {
                    msg = "Error :" + ex.getMessage();
                }
                return msg;
            }

            @Override
            protected void onPostExecute(String msg) {
                mDisplay.append(msg + "\n");
            }
        }.execute(null, null, null);
    } else if (view == findViewById(R.id.clear)) {
        mDisplay.setText("");
    }
}

これ言ってみて:

アプリ サーバーで XMPP メッセージを受信する

When GCM receives an upstream messaging call from a client app, it generates the necessary XMPP stanza for sending the upstream message.

GCM はカテゴリと from フィールドを追加し、次のようなスタンザをアプリ サーバーに送信します。

<message id="">
  <gcm xmlns="google:mobile:data">
  {
      "category":"com.example.yourapp", // to know which app sent it
      "data":
      {
          "hello":"world",
      },
      "message_id":"m-123",
      "from":"REGID"
  }
  </gcm>
</message>

しかし、アップストリームのドキュメントが限られているため、いくつか質問があります。

1-) Android は、アップストリームの送信者 ID を使用して JSON データを送信します...しかし、API に登録すると、アプリサーバーについて尋ねられませんでした。送信者 ID は、Gmail アカウントのアプリケーションをパッケージで識別します。アプリサーバーではありません。では、gcm はクライアントからのデータをどこに送信するのでしょうか? GCM がアプリ サーバーを認識する方法..

2-) 予算が限られているため、サーバーは共有アカウントの Web サーバーです。だから私はphpを使わなければなりません...しかし、私はドキュメントを読みました、「あなたのアプリサーバーは永続的な接続でなければなりません」定期的に接続して切断しないでください...アプリサーバーをphpとして使用できますか? そのGCMは、データをエミュレートしてAndroidクライアントに応答するPHPスクリプトを接続しますか?

4

3 に答える 3

2
  1. ご存じのとおり、サーバーと GCM 間の接続には送信者 ID と API キーが必要でした。また、クライアント アプリがアップストリーム メッセージを送信する場合も、同じ送信者 ID を使用します。したがって、GCM はアップストリーム データの送信先を認識しています。

  2. プログラミング言語に制限はありません。もちろん、PHP を使用できます。GCM サーバーへの永続的な接続を維持する必要があるだけです。

サーバーがダウンしていて、特定のメッセージに対して GCM に ACK を返さなかった場合、Google はアップストリーム メッセージの送信を再試行することに注意してください。

于 2015-11-27T12:34:46.703 に答える
1

これがアップストリームメッセージを管理する方法です...

最初にJAXLを入手する

Apache実行ディレクトリに配置します...

新しいphpスクリプトファイルを作成...

<?php
include_once 'jaxl.php';

$client = new JAXL(array(
    'jid' => '/*Write sender ID here*/@gcm.googleapis.com',
    'pass' => 'Write here your GCM apı key',
    'host' => 'gcm-preprod.googleapis.com',
    'port' => 5236,
   'strict' => false,
    'force_tls' => true,
    'log_level' => JAXL_DEBUG,
    'auth_type' => 'PLAIN',
    'protocol' => 'tls',
     'ssl' => TRUE,
    'log_path'=> 'ex.txt'  /*This create text file to comminication between gcm and your server*/
));

$client->add_cb('on_message_stanza', function($msg) {
 echo 'now what!!';
 });

 $client->add_cb('on_auth_success', function() {
 echo 'it should';
//Here is for sending downstream msg
  }); 

 $client->add_cb('on_error_message',function()
 {
 global $client;
 echo 'error<br/>';
 _info('got on_error_message cb jid'.$client->full_jid->to_string());
 });

$client->start();

?>

Android 側では、GCM と統合した後、クリック リスナー内のボタン

String msg = "";
                        try {
                            Bundle data = new Bundle();
                            data.putString("my_message", "Hello World");
                            data.putString("my_action", "SAY_HELLO");
                            String id = Integer.toString(incrementAndGet());
                            gcm.send( "/*Write here sender ID*/"+ "@gcm.googleapis.com", id, data);
                            msg = "Sent message";
                        } catch (IOException ex) {
                            msg = "Error :" + ex.getMessage();
                        }
                        Log.d(msg,"-------------");

次に、上記の php スクリプトを実行し、アップストリーム メッセージを送信するためにボタンをクリックします。jaxl が作成した ex.txt を見てください。アプリによって送信された "Hello World" メッセージが表示されます。

于 2016-02-08T07:25:15.213 に答える