版权声明:本文为博主原创文章,未经博主允许不得转载。

我们知道iOS有自己的推送服务,但很遗憾Android没有原生的推送服务,现在有很多第三方的推送服务,比如个推、极光、亚马逊、百度云、聚能等。今天我们就来研究下极光推送的后台服务器如何实现。

极光推送(JPush)是独立的第三方云推送平台,致力于为全球移动应用开发者提供专业、高效的移动消息推送服务。

OK 下面直接来看代码:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cn.jiguang.common.ClientConfig;
import cn.jiguang.common.resp.APIConnectionException;
import cn.jiguang.common.resp.APIRequestException;
import cn.jpush.api.JPushClient;
import cn.jpush.api.push.PushResult;
import cn.jpush.api.push.model.Message;
import cn.jpush.api.push.model.Options;
import cn.jpush.api.push.model.Platform;
import cn.jpush.api.push.model.PushPayload;
import cn.jpush.api.push.model.audience.Audience;
import cn.jpush.api.push.model.audience.AudienceTarget;
import cn.jpush.api.push.model.notification.AndroidNotification;
import cn.jpush.api.push.model.notification.IosNotification;
import cn.jpush.api.push.model.notification.Notification;

public class Test {

    protected static final Logger LOG = LoggerFactory.getLogger(Test.class);

    // demo App defined in resources/jpush-api.conf

    public static final String TITLE = "我是TITLE";
    public static final String ALERT = "我是ALERT";
    public static final String MSG_CONTENT = "我是MSG_CONTENT";
    public static final String REGISTRATION_ID = "0900e8d85ef";
    public static final String TAG = "tag_api";

    private static String masterSecret = "d0da3fc459ddb6b5fa8acc95";
    private static String appKey = "11f46d7cffe4ef99b554e35b";

    public static JPushClient jpushClient = null;

    public static void main(String[] args) {

        jpushClient = new JPushClient(masterSecret, appKey, null, ClientConfig.getInstance());

        // For push, all you need do is to build PushPayload object.
        // 生成推送的内容,这里我们先测试全部推送
        PushPayload payload = buildPushObject_all_alias_alert();

        try {
            System.out.println(payload.toString());
            PushResult result = jpushClient.sendPush(payload);
            System.out.println(result.toString());

            LOG.info("Got result - " + result);

        } catch (APIConnectionException e) {
            // Connection error, should retry later
            LOG.error("Connection error, should retry later", e);

        } catch (APIRequestException e) {
            // Should review the error, and fix the request
            LOG.error("Should review the error, and fix the request", e);
            LOG.info("HTTP Status: " + e.getStatus());
            LOG.info("Error Code: " + e.getErrorCode());
            LOG.info("Error Message: " + e.getErrorMessage());
        }
    }

    /** * 快捷地构建推送对象:所有平台,所有设备,内容为 ALERT 的通知。 * @return */
    public static PushPayload buildPushObject_all_all_alert() {
        return PushPayload.alertAll(ALERT);
    }

    /** * 构建推送对象:所有平台,推送目标是别名为 "alias1",通知内容为 ALERT。 * @return */
    public static PushPayload buildPushObject_all_alias_alert() {
        return PushPayload.newBuilder()
                .setPlatform(Platform.all())// 设置接受的平台
                .setAudience(Audience.all())// Audience设置为all,说明采用广播方式推送,所有用户都可以接收到
                .setNotification(Notification.alert(ALERT))
                .build();
    }

    /** * 构建推送对象:平台是 Android,目标是 tag 为 "tag1" 的设备,内容是 Android 通知 ALERT,并且标题为 TITLE。 * @return */
    public static PushPayload buildPushObject_android_tag_alertWithTitle() {
        return PushPayload.newBuilder()
                .setPlatform(Platform.android())
                .setAudience(Audience.all())
                .setNotification(Notification.android(ALERT, TITLE, null))
                .build();
    }

    /** * 构建推送对象:平台是 iOS,推送目标是 "tag1", "tag_all" 的交集, * 推送内容同时包括通知与消息 - 通知信息是 ALERT,角标数字为 5,通知声音为 "happy", * 并且附加字段 from = "JPush";消息内容是 MSG_CONTENT。通知是 APNs 推送通道的, * 消息是 JPush 应用内消息通道的。APNs 的推送环境是“生产”(如果不显式设置的话,Library 会默认指定为开发) * @return */
    public static PushPayload buildPushObject_ios_tagAnd_alertWithExtrasAndMessage() {
        return PushPayload.newBuilder()
                    .setPlatform(Platform.ios())
                    .setAudience(Audience.tag_and("tag1", "tag_all"))
                    .setNotification(Notification.newBuilder()
                            .addPlatformNotification(IosNotification.newBuilder()
                                    .setAlert(ALERT)
                                    .setBadge(5)
                                    .setSound("happy")
                                    .addExtra("from", "JPush")
                                    .build())
                            .build())
                     .setMessage(Message.content(MSG_CONTENT))
                     .setOptions(Options.newBuilder()
                             .setApnsProduction(true)
                             .build())
                     .build();
    }

    /** * 构建推送对象:平台是 Andorid 与 iOS, * 推送目标是 ("tag1" 与 "tag2" 的并集)交("alias1" 与 "alias2" 的并集), * 推送内容是 - 内容为 MSG_CONTENT 的消息,并且附加字段 from = JPush。 * @return */
    public static PushPayload buildPushObject_android_and_ios() {
        return PushPayload.newBuilder().setPlatform(Platform.android_ios()).setAudience(Audience.tag("tag1"))
                .setNotification(Notification.newBuilder().setAlert("alert content")
                        .addPlatformNotification(AndroidNotification.newBuilder().setTitle("Android Title").build())
                        .addPlatformNotification(
                                IosNotification.newBuilder().incrBadge(1).addExtra("extra_key", "extra_value").build())
                        .build())
                .build();
    }

    /** * 构建推送对象:推送内容包含SMS信息 * @return */
    public static PushPayload buildPushObject_ios_audienceMore_messageWithExtras() {
        return PushPayload.newBuilder().setPlatform(Platform.android_ios())
                .setAudience(Audience.newBuilder().addAudienceTarget(AudienceTarget.tag("tag1", "tag2"))
                        .addAudienceTarget(AudienceTarget.alias("alias1", "alias2")).build())
                .setMessage(Message.newBuilder().setMsgContent(MSG_CONTENT).addExtra("from", "JPush").build()).build();
    }
}

附上源码下载:http://download.csdn.net/detail/pingxiaogai/9751338