1

我使用 javapns 向 ios 推送通知,使用 android.gcm.server 向 android 设备推送通知。但是,当我向许多设备发送一个通知时,每个设备都会收到多个发送的通知副本。有时这个数字是 2,有时是 3。它几乎不会只提供我一直期望的一个。有任何想法吗 ?

我的代码如下

public void pushNotificationsToAndroid(String pushMessage,
            String contentType, String content, String notification_id,
            List<String> devices) {



        try {

            Sender sender = new Sender(
                    properties
                            .getProperty("notification.android.senderIdDemo"));
            com.google.android.gcm.server.Message message = new com.google.android.gcm.server.Message.Builder()
                    .collapseKey("1").timeToLive(3).delayWhileIdle(true)
                    .addData("message", pushMessage)
                    .addData("content_type", contentType)
                    .addData("content", content)
                    .addData("notification_id", notification_id).build();

            MulticastResult result = sender.send(message, devices, 1);

            if (result.getResults() == null) {

                System.out.println(result.getFailure());
                logger.debug("getFailure() of sender.send() method :",
                        result.getFailure());

            }
        } catch (Exception exception) {
            logger.error("erorr push notification ");

        }

        System.out.println("sent not at " + new Date());
        logger.debug(
                "exit pushNotificationsToAndroid() method : current time is ",
                new Date());

    }

    public void pushNotificationsToIOS(String pushMessage, String contentType,
            String content, String notification_id, List<String> devices)
             {


        boolean production = true;
        String password = properties
                .getProperty("notification.ios.password");

        String keyStroke = properties
                .getProperty("notification.ios.certFileName");

        AppleNotificationServer jksServer = null;


        try {

            jksServer = new AppleNotificationServerBasicImpl(keyStroke,
                    password, ConnectionToAppleServer.KEYSTORE_TYPE_JKS,
                    production);

        } catch (KeystoreException keystoreException) {

            logger.error("erorr creating jksServer");

        }

        PushNotificationPayload payload = PushNotificationPayload.complex();

        try {

            payload.addAlert(pushMessage);

        } catch (JSONException e2) {

            logger.error("erorr creating payload alert");

        }

        try {

            payload.addCustomDictionary("content_type", contentType);

        } catch (JSONException e1) {

            logger.error("erorr creating payload content_type");

        }

        try {

            payload.addCustomDictionary("content", content);

        } catch (JSONException e1) {

            logger.error("erorr creating payload content");

        }

        try {

            payload.addCustomDictionary("notification_id", notification_id);

        } catch (JSONException e1) {

            logger.error("erorr creating payload notification_id");

        }

        PushNotificationManager pushManager = new PushNotificationManager();

        try {

            pushManager.initializeConnection(jksServer);

        } catch (CommunicationException | KeystoreException e) {

            logger.error("erorr connecting Server");


        }
        try {

            List<PushedNotification> notifications = pushManager
                    .sendNotifications(payload, Devices.asDevices(devices));


        } catch (CommunicationException | KeystoreException e) {

            logger.error("erorr push notifications");

        }

    }
4

1 回答 1

1

android 官方网站上说了一些重复消息条件的原因。

于 2013-11-13T05:03:10.207 回答