1

PHPを使用して登録IDの配列をgcmに送信しようとしていますが、機能しません。sinchを使用しています。これが私のコードです:

class sendPushNotifications extends AutoAsyncTask {

    List<PushPair> pushPairs;

    String message;

    String senderId;

    public sendPushNotifications(Context context, String message, String senderId, List<PushPair> pushPairs) {
        super(context, false);

        this.message = message;
        this.pushPairs = pushPairs;
        this.senderId = senderId;
    }

    @Override
    protected Integer doInBackground(Void... params) {
        boolean connectedToInternet = connManager.getNetworkInfo( ConnectivityManager.TYPE_WIFI).isConnected()
                || connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected();
        if (connectedToInternet) 
        {   
            String regId;
            String[] arrayList = new String[]();

            for(PushPair p: pushPairs)
            {
                regId = new String(p.getPushData());
                arrayList.add(regId);
            }

            UserFunctions.sendPushNotifications(senderId, message, arrayList);

            asyncTask = null;
            return 0;
        } 

上記のコードが間違っていることを知っているので、質問しています。

(p) 関数を使用して取得できる GCM 登録 ID を含むプッシュペアのリストです。p.getPushData()文字列の配列に各登録 ID を入力し、それをサーバーに送信してから GCM に送信します。のコードUserFunctions.sendPushNotifications(senderId, message, arrayList);は:

public static JSONObject sendPushNotifications(String senderId, String message, String[] gcm_regId) 
    {
        List<NameValuePair> params = new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("message", message));
        params.add(new BasicNameValuePair("senderId", senderId));

        for (int i = 0; i < gcm_regId.length; i++)
            params.add(new BasicNameValuePair("gcm_regId", gcm_regId[i]));

        JSONObject json = JSONParser.getJSONFromUrl(hostURL+"gcm.php", params);
        return json;
    }

私のPHPコードは次のとおりです。

$message = $_POST['message'];
$gcm_regId = $_POST['gcm_regId'];
$senderId= $_POST['senderId'];

// Set POST variables
$url = 'https://android.googleapis.com/gcm/send';

$fields = array(
        'registration_ids'  => array($gcm_regId),
        'data'              => array( 'message' => $message ),
        'senderId'          => $senderId,
);

$headers = array(
        'Authorization: key=' . '*********************',
        '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 ) );

curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);

// Execute post
$result = curl_exec($ch);

// Close connection
curl_close($ch);

echo json_encode( $result );

ユーザーがサインインした最初のデバイスに通知を送信できます

pusPairs.get(0).getPushData();

しかし、ユーザーが自分のアカウントにサインインしているすべてのデバイスに通知を送信したいので、助けてください。

4

0 に答える 0