我正在尝试使用 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();
但我想将通知发送到用户已登录其帐户的所有设备,因此请提供一些帮助。