Je souhaite envoyer un message (par exemple, mise à jour disponible) à tous les utilisateurs (~ 15 000). J'ai mis en œuvre App Engine Backend with Google Cloud Messaging pour envoyer un message.Backend App Engine avec Google Cloud Messaging envoyant un message à plus de 1000 utilisateurs
J'ai testé sur 2 appareils. J'ai un message sur les deux. Mais comme le dit google docs "GCM prend en charge jusqu'à 1000 destinataires pour un seul message."
Ma question est de savoir comment envoyer un même message à rester 14.000 utilisateurs dans mon cas? Ou le code ci-dessous s'en occupera?
est Ci-dessous le code qui envoie un message
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);
}
}
}
}
}
Je sais qu'il ya des questions simillar mais j'utilise langage Java. J'ai trouvé des questions qui utilisent le langage PHP au backend. donc pas utile pour moi!
Est-ce qu'il ya quelqu'un qui a mis en œuvre avec succès App Engine + Google Cloud Messaging langage Java?
Dans la ligne de code ci-dessous si je remplace 1000 par 15 000 Réservera-t-il mon problème?
List<RegistrationRecord> records = ofy().load().type(RegistrationRecord.class).limit(1000).list();
S'il vous plaît, veuillez nous aider dès que possible. Et très désolé pour mon anglais .. Si quelqu'un a besoin d'autres détails, vous êtes invités à demander.
Merci pour votre temps.
ce qui se passe lorsque vous exécutez le code que vous dites pourrait fonctionner alors? –
@PaulCollingwood Quand j'ai couru le code de client sur 2 appareils tout a eu l'identification de reg alors j'ai envoyé des messages de appspot.com tous les dispositifs ont reçu le message. Merci. – Programmer
Cochez la case [Ma question/réponse] [1] Je l'ai fait de cette façon, a besoin d'un test si [1]: http://stackoverflow.com/questions/29934331/push-notifications-for-1000 -devices-à travers-gcm-serverjava/29935914 # 29935914 – busted13