Я хочу отправить сообщение (например, доступно обновление) всем пользователям (~ 15 000). Я внедрил серверную часть App Engine с Google Cloud Messaging для отправки сообщений.
Я тестировал на 2 устройствах. Получил сообщение на обоих. Но, как сказано в документах Google, "GCM поддерживает до 1000 получателей для одного сообщения".
Мой вопрос: как отправить одно и то же сообщение оставшимся 14 000 пользователей в моем случае? Или приведенный ниже код позаботится об этом?
Ниже приведен код, который отправляет сообщение
import com.google.android.gcm.server.Constants;
import com.google.android.gcm.server.Message;
import com.google.android.gcm.server.Result;
import com.google.android.gcm.server.Sender;
import com.google.api.server.spi.config.Api;
import com.google.api.server.spi.config.ApiNamespace;
import java.io.IOException;
import java.util.List;
import java.util.logging.Logger;
import javax.inject.Named;
import static com.example.shani.myapplication.backend.OfyService.ofy;
/**
* An endpoint to send messages to devices registered with the backend
* <p/>
* For more information, see
* https://developers.google.com/appengine/docs/java/endpoints/
* <p/>
* NOTE: This endpoint does not use any form of authorization or
* authentication! If this app is deployed, anyone can access this endpoint! If
* you'd like to add authentication, take a look at the documentation.
*/
@Api(name = "messaging", version = "v1", namespace = @ApiNamespace(ownerDomain = "backend.myapplication.shani.example.com", ownerName = "backend.myapplication.shani.example.com", packagePath = ""))
public class MessagingEndpoint {
private static final Logger log = Logger.getLogger(MessagingEndpoint.class.getName());
/**
* Api Keys can be obtained from the google cloud console
*/
private static final String API_KEY = System.getProperty("gcm.api.key");
/**
* Send to the first 10 devices (You can modify this to send to any number of devices or a specific device)
*
* @param message The message to send
*/
public void sendMessage(@Named("message") String message) throws IOException {
if (message == null || message.trim().length() == 0) {
log.warning("Not sending message because it is empty");
return;
}
// crop longer messages
if (message.length() > 1000) {
message = message.substring(0, 1000) + "[...]";
}
Sender sender = new Sender(API_KEY);
Message msg = new Message.Builder().addData("message", message).build();
List<RegistrationRecord> records = ofy().load().type(RegistrationRecord.class).limit(1000).list();
for (RegistrationRecord record : records) {
Result result = sender.send(msg, record.getRegId(), 5);
if (result.getMessageId() != null) {
log.info("Message sent to " + record.getRegId());
String canonicalRegId = result.getCanonicalRegistrationId();
if (canonicalRegId != null) {
// if the regId changed, we have to update the datastore
log.info("Registration Id changed for " + record.getRegId() + " updating to " + canonicalRegId);
record.setRegId(canonicalRegId);
ofy().save().entity(record).now();
}
} else {
String error = result.getErrorCodeName();
if (error.equals(Constants.ERROR_NOT_REGISTERED)) {
log.warning("Registration Id " + record.getRegId() + " no longer registered with GCM, removing from datastore");
// if the device is no longer registered with Gcm, remove it from the datastore
ofy().delete().entity(record).now();
} else {
log.warning("Error when sending message : " + error);
}
}
}
}
}
Я знаю, что есть похожие вопросы, но я использую язык Java. Я нашел вопросы, которые используют язык php в бэкэнде. так мне не поможет!
- Google Cloud Messaging: отправить сообщение всем пользователям
- Отправка push-уведомлений на нескольких устройствах
Есть ли кто-нибудь, кто успешно внедрил язык JAVA App Engine + Google Cloud Messaging?
В приведенной ниже строке кода, если я заменю 1000 на 15 000, решит ли это мою проблему?
List<RegistrationRecord> records = ofy().load().type(RegistrationRecord.class).limit(1000).list();
Пожалуйста, помогите как можно скорее. И очень извините за мой английский .. Если кому-то нужны другие подробности, вы можете спросить.
Спасибо за ваше время.