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