Я пытаюсь отправить массив идентификаторов регистрации в gcm с помощью php, но это не работает, я использую 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) это список pushpairs, которые содержат идентификаторы регистрации GCM, которые я могу получить, используя функцию p.getPushData()
я хочу заполнить массив строк каждым идентификатором регистрации и отправить его на мой сервер, а затем отправить его в 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();
но я хочу отправить уведомление всем устройствам, на которых пользователь вошел в свою учетную запись, поэтому, пожалуйста, помогите.
Задача ещё не решена.
Других решений пока нет …