`

APICloud(十三):使用jpush进行消息推送

阅读更多

前言:

最近APP上要添加推送的功能,而APICloud的模板库中有推送的模块,比较之后决定用极光推送,模块名称叫ajpush,添加到自己的项目就可以用了。使用文档官方也有,虽说方法讲的比较细,但是感觉缺少连贯性,做了第一步下一步应该干什么用什么方法就迷茫了。同样的极光推送官网的API也写的很详细,奈何也没有连贯性的例子可以参考,这两个迷茫的东东让我跌跌撞撞了好几天都没有进展,而网上基本上都是代码没有这种入门级别的例子,后来看到了一篇讲入门的例子(连接如下:http://blog.csdn.net/xuexiiphone/article/details/51252796。),终于知道是怎么回事了,在此表示感谢。这里做个记录希望能够帮助到当初像我一样迷茫的小白兔们。

 

先来说一下它的基本过程:它主要涉及到三个方面

第一客户端:这个在APICloud中进行配置并添加检测代码即可完成

第二极光推送第三方:主要用来为客户端推送服务器端要求推送的东东,起桥梁作用

第三服务器:APP作为客户端安装在手机上,需要从服务器端请求数据。同样,推送什么样的消息也通过这个服务器进行配置

 

接下来讲作为第三方的极光推送,因为它衔接着客户端和服务器端,也就是两者都要用它,所以先讲它。

1、登录极光推送官网https://www.jiguang.cn/,注册账号并登录

2、创建应用:登陆进去之后,可能会看到三个选项:“极光开发者服务”、“极光数据服务”、“极光精确广告”,选第一个“进入后台”。在页面上找“创建应用”,输入“应用名称”然后“创建我的应用”。

3、获取AppKey和Master Secret:应用创建成功后,通过在当前页就能看到AppKey和Master Secret。若是看不到,可以点击左侧的“应用信息”找到刚刚创建的应用,点一下应用右下角的设置,获取AppKey和Master Secret,Master Secret通常是隐藏的,需要点击“查看”才能显示出来。

4、推送配置:在“获取AppKey和Master Secret”页面的下方,找到“推送配置”,点击右侧的“完成推送配置”,在打开的页面中选择“Android”,“应用包名”输入APICloud中APP的包名,获取方法如图:

这些信息有点隐秘,通常概览中都只是显示少量的APP信息,点击右下角的^才能看到更全的。

输入包名之后,点击“提交” 。

到这里第三方极光推送配置基本上完成了。

 

第三步讲在手机APP中嵌入极光推送

1、在模块库中添加“ajpush”到自己的APP中

2、在config.xml中注册,添加如下代码:

<feature name="ajpush">
    <param name="app_key" value="上一步获取到的AppKey"/>
    <param name="channel" value="随便填,最好不要用中文"/>
</feature>

3、在APP中引入极光推送并添加监听——最好是在首页添加——我这里是消息推送,具体代码如下:

apiready=function(){
	noticePush();
}

var jpush = null;
//该方法用来进行公告推送
function noticePush(){
	jpush = api.require('ajpush');             
    //初始化
    jpush.init(function(ret) {
    	//alert(ret.status);//若返回1说明初始化成功
        if (ret && ret.status) {                    
           /*
            jpush.setListener(function(ret) {  
                var id = ret.id;//消息ID  
                var title = ret.title; //消息标题 
                var content = ret.content;  //消息内容
                var extra = ret.extra;  //额外键值对
                console.log("id=" + id + ",title=" + title + ",content=" + content + ",extra=" + extra);  
            });
            */  
        }  
    }); 
    //监听状态栏上消息被点击的事件
    api.addEventListener({name:'appintent'}, function(ret,err) {
		//alert('通知被点击,收到数据:\n' + JSON.stringify(ret));//监听通知被点击后收到的数据	    		
		var extra = ret.appParam.ajpush.extra;
		extra = eval('('+extra+')');
		//console.log("extra.user_id=" + extra.user_id + ",extra.notice_id=" + extra.notice_id);	    		 		
			
		api.openWin({
            name: 'noticedetails_win',
            url: 'noticedetails.html',
            allowEdit : true,
            pageParam:{
            	'notice_id':extra.notice_id
            },
            progress:{
            	type:"default",
            	title:"玩命加载中..."
            }
    	});            	
	})
	api.addEventListener({name:'pause'}, function(ret,err) {
		onPause();//监听应用进入后台,通知jpush暂停事件
	});
		
	api.addEventListener({name:'resume'}, function(ret,err) {
		onResume();//监听应用恢复到前台,通知jpush恢复事件
	});            
}

//统计-app恢复
function onResume(){
	jpush.onResume();
	console.log('JPush onResume');
}

//统计-app暂停
function onPause(){
	jpush.onPause();
	console.log('JPush onPause');
}

4、测试:重新登录“极光推送“官网,进入到后台,从“左上角”选择刚刚创建的app,再点击与APP名称平行的“推送”选项卡,点击左侧的“发送通知”,输入短信内容,平台选“Android”,目标人群选“广播(所有人)”,发送时间选“立即”,最后点“立即发送”。查看安装了APP的手机上是否收到推送消息。

 

第四步搭建自己的服务器发送消息,我这里用的是Java版

1、从极光官网下载“服务器SDK”,链接如下:https://docs.jiguang.cn/jpush/resources/#sdk_1,选择Java版本的,下载下来之后进行解压。这个SDK我下载过好几个版本的,前一阵子下载的时候有Java代码还有jar包但是没有最关键的两个jar包,今天下载的只有2个关键jar包,没有例子也没有其他需要的jar包,大家注意。

 

需要的jar包总共有6个:gson-2.2.2.jar、jiguang-common-1.0.6.jar、jpush-client-3.2.19.jar、slf4j-api-1.6.1.jar、slf4j-api-1.7.5.jar、slf4j-log4j12-1.5.2.jar,其中jiguang-common-1.0.6.jar、jpush-client-3.2.19.jar两个是关键,已经上传到附件有需要的可以下载

 

说到这个JAR包有句题外话想说:因为开始弄的时候并不知道有多少个包,网上也只是有Java代码并没有说需要用到哪些包更别提从哪里弄了,有些有说到下载极光推送官网的Example从中导入需要用到的jar包,我并不知道从哪里下载这个Example(极光的API太多且不够系统)以为是“进行推送配置时给的demo”,就下载了demo参考官网的信息进行了配置,那个demo是关于安卓的,而我从来没用过安卓,就照葫芦画瓢的搭建了安卓环境,就为这个环境浪费了2天时间,期间磕磕碰碰的遇到了各种问题,后来看了上面提到的文章弄完了这个推送功能才明白:这个“进行推送配置时给的demo”对于使用APICloud的我来说根本就不需要去研究,它只不过是一个插件用来安装到APP所在的手机用来接收消息,而APICloud中的ajpush模块就是干这个用的,已经集成了就不需要再安装了。

所以在这里提醒使用ajpush模块实现推送功能的童鞋们,这个该死的demo跟咱们的APP没有半毛钱关系,也不要想着从这里去找咱们需要的jar包因为它根本就没有。

 

好啦, 废话说到这里,言归正传。

 

2、新建web项目,导入上面的6个jar包,并build-path

 

3、将官网例子中\jpush-api-java-client-xxx\src\main\java路径下cn文件夹整个拖入到src中,参考一下官网的例子。可能官方下载的没有例子(我下载jpush-api-java-client-3.2.20.zip就没有),jpush-api-java-client-3.2.19的有,已经上传到附件,有需要的可以下载。

 

4、根据Example写的自己的推送

public class JpushInstance {
	 protected static final Logger LOG = LoggerFactory.getLogger(JpushInstance.class);

	 // demo App defined in resources/jpush-api.conf 
	private static String appKey="xxxxxx";
	private static String masterSecret="xxxxxx";
	//long 	可选 	
	//保存离线消息的时长。秒为单位。最多支持10天(864000秒)。
	//0 表示该消息不保存离线。即:用户在线马上发出,当前不在线用户将不会收到此消息。
	//此参数不设置则表示默认,默认为保存1天的离线消息(86400秒)。
	private static int timeToLive=3;
	private static String TITLE = "wjl";
	private static String ALERT = "发布了公告";
	private static String MSG_CONTENT = TITLE+":"+ALERT;
	private static JPushClient jpushClient=null;
	private static Map<String,String> extrasMap = null;//用来保存需要用的参数
	
	/**
	 * 该方法用来推送消息
	 * @param title:通知标题,如果指定了,则通知里原来展示 App名称的地方,将展示成这个字段。
	 * @param alert:通知内容,这里指定了,则会覆盖上级统一指定的 alert 信息;内容可以为空字符串,则表示不展示到通知栏。
	 * @param extras:拓展字段这里自定义 JSON 格式的 Key/Value 信息,以供业务使用。
	 * **/
	public static void sendPush(String title,String alert,Map<String,String> extras) {
		 jpushClient = new JPushClient(masterSecret, appKey, timeToLive);
		 TITLE = title;
		 ALERT = alert;
		 if(extras!=null)extrasMap = extras;
		 
		 //生成推送的内容,全部推送
        PushPayload payload=buildPushObject_android_tag_alertWithTitle();
        
        try {
        	//System.out.println(payload.toString());
            PushResult result = jpushClient.sendPush(payload);
           // System.out.println(result+"................................");
            LOG.info("/******************************极光推送开始******************************/");
        	LOG.info("时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"\r\n");
            LOG.info("极光推送:发送状态: " + result);
            LOG.info("/******************************极光推送结束******************************/");
            
        } catch (APIConnectionException e) {
            LOG.error("极光推送:Connection error. Should retry later. ", e);
            
        } catch (APIRequestException e) {
        	LOG.info("/******************************极光推送开始******************************/");
        	LOG.info("时间:"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"\r\n");
            LOG.error("Error response from JPush server. Should review and fix it. ", e);
            LOG.info("HTTP Status: " + e.getStatus());
            LOG.info("Error Code: " + e.getErrorCode());
            LOG.info("Error Message: " + e.getErrorMessage());
            LOG.info("Msg ID: " + e.getMsgId());
            LOG.info("/******************************极光推送结束******************************/");
        }
	}
	
	public static PushPayload buildPushObject_all_all_alert() {
	    return PushPayload.alertAll(ALERT);
	}
	
    public static PushPayload buildPushObject_all_alias_alert() {
        return PushPayload.newBuilder()
                .setPlatform(Platform.all())//设置接受的平台
                .setAudience(Audience.all())//Audience设置为all,说明采用广播方式推送,所有用户都可以接收到
                .setNotification(Notification.alert(ALERT))
                .build();
    }
    
    public static PushPayload buildPushObject_android_tag_alertWithTitle() {
        return PushPayload.newBuilder()
                .setPlatform(Platform.android())//安卓平台
                .setAudience(Audience.all())//Audience设置为all,说明采用广播方式推送,所有用户都可以接收到
                .setNotification(Notification.android(ALERT, TITLE, extrasMap))
                .build();
    }
    
    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();
    }
    
    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();
    }
    
    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();
    }
}

5、在需要推送消息的地方进行调用,我这里是手机APP上发布一条消息,通过ajax传到后台,服务器将数据保存到数据库之后,调用推送程序进行推送:

Map<String,String> extrasMap = new HashMap<String,String>();
extrasMap.put("user_id", user_id);
extrasMap.put("notice_id",(result2)+"");
com.tzj.tsp.admin.jpush.JpushInstance.sendPush("wjl","发布了公告",extrasMap);

6、测试:手机APP发送一条消息,测试手机能否收到推送消息。

 

至此整个推送功能完成,希望对大家有所帮助。

 

最后祝大家好运!

  • 大小: 24.8 KB
分享到:
评论

相关推荐

    APICloud云平台推送技术指南

    此指南涉及了iOS推送证书的申请、转换、设置推送消息以及查看推送统计等多个方面,同时也详细解释了在接收推送消息时如何使用push模块进行绑定、设置群组和获取推送消息。 首先,对于iOS设备的推送服务,开发者必须...

    APICloud开发工具:WebStorm插件

    APICloud是一个强大的移动应用开发平台,它允许开发者使用JavaScript进行跨平台的原生应用开发。WebStorm是一款由JetBrains公司推出的高效JavaScript IDE,专为前端开发者设计,提供了丰富的代码提示、调试、版本...

    APICloud-CLI工具使用说明

    在完成构建后,可以使用`apicloud preview`命令进行真机预览,将应用推送到设备上测试。你需要注册APICloud账号,并在设备上安装APICloud预览App。 7. **发布应用** 当项目开发完毕,准备发布时,可以使用`...

    ApiCloud下:视频播放模块SDK

    这个SDK专为Android Studio设计,便于在apicloud的自定义模块开发中使用。以下将详细介绍APICloud视频播放模块SDK的核心功能、使用方法以及在Android应用开发中的实践。 一、APICloud视频播放模块SDK概述 APICloud...

    APICloud教程:服务器上的页面执行API

    ### APICloud教程:服务器上的页面执行API #### 背景介绍 APICloud作为一款混合开发平台,为开发者提供了高效便捷的应用开发...希望本文能为正在使用或即将使用APICloud进行应用开发的朋友提供一些有用的参考和启发。

    藏经阁-APICloud服务CAF开发者:共筑YunOS开发者生态.pdf

    APICloud提供了丰富的云服务,包括数据存储、云API调用、在线应用开发控制台、版本管理、统计分析、推送等功能。APICloud的云服务能够帮助开发者快速开发和部署应用,提高应用的可靠性和用户体验。 知识点7:...

    APICloud(九):上拉加载数据和长按事件

    在IT行业中,APICloud是一个强大的混合移动应用开发平台,它允许开发者使用JavaScript进行原生APP的开发,大大降低了跨平台开发的复杂性。本篇我们将深入探讨如何在APICloud中实现上拉加载数据和长按事件,这两个...

    使用apicloud仿每日优鲜源码

    6. **推送通知**:集成推送服务,如极光推送,实现新订单通知、促销信息推送等功能。 7. **用户体验优化**:包括页面加载速度优化、交互设计、错误处理等,确保应用流畅、易用。 8. **性能监控**:使用APICloud...

    在APICloud平台中,融云IM云服务的使用教程.pdf

    融云是一家专注于即时通讯解决方案的提供商,其IM云服务提供了包括单聊、群聊、消息推送等多种功能,适用于各种类型的移动应用。在APICloud中,融云IM云服务通过一个名为`rongCloud chatBox`的模块来实现这些功能。 ...

    APICloud-DevTools:APICloud开发工具及插件原始码合集-源码开源

    APICloud开发工具及插件源码合集 Sublime Text插件 Sublime APICloud插件是为HTML5前端开发者提供的一套开源的Sublime Text扩展插件,包括:应用管理,应用框架,页面模板,代码提示,代码管理,小部件打包,真机...

    apicloud模块权限.zip

    1. **APICloud**:APICloud 是一套完整的移动应用开发解决方案,它提供了丰富的API接口,使得开发者可以通过Web技术进行原生应用的开发,降低了跨平台开发的门槛。 2. **模块权限**:在Android和iOS系统中,为了...

    APICloud是什么?

    - **推送服务**:用于向用户发送即时消息,提高应用的用户参与度。 - **云修复服务**:允许应用程序在遇到问题时快速回滚到之前的稳定版本。 - **大数据分析**:提供数据分析服务,帮助开发者深入了解用户行为和...

    vue_apicloud:使用vue和apicloud构建混合应用程序

    app推送 自动更新(apicloud官方提供了,可以整合使用) 快速开始 # 1. 先检查下 Node.js 是否安装成功 $ node -v v10.0.0 $ npm -v 6.2.0 # 2. 由于众所周知的原因,可以考虑切换源为 taobao 源 $ npm set registry ...

    APICloud-Studio:APICloud提供了一个单一的开源免费HTML编码工具,方便开发者进行应用的开发和调试,整个项目基于Eclipse和Aptana,生成的产品详见APICloud-Studio-RCP项目

    这款工具是基于Eclipse和Aptana这两个知名的集成开发环境(IDE)进行构建的,因此它继承了这些平台的强大功能,并针对APICloud的特性进行了定制化。 首先,APICloud Studio的核心功能是支持多平台应用开发。通过...

    apicloud制作一个app

    2. **丰富的组件库**:APICloud提供了大量的原生模块和组件,包括地图、推送通知、支付、社交媒体分享等,这些都为开发者提供了丰富的功能选项。 3. **云编译服务**:通过云编译,开发者无需安装复杂的本地环境,只...

    APICloud案例源码、模块源码、考试源码、开发工具大集合!赶快收藏

    5. **热更新能力**:通过APICloud的云端推送服务,开发者可以对已发布的应用进行在线更新,无需用户手动下载新版本,提高了用户体验。 现在我们来看看压缩包中的具体内容: - **APICloud案例源码**:这些案例源码...

    apicloud七天培训课day3代码

    在APICloud七天培训课程的第三天,我们深入学习了如何使用APICloud平台进行移动应用开发,特别是关于代码编写和项目构建的相关知识。APICloud是一个跨平台的移动开发框架,它允许开发者使用JavaScript来构建原生的...

    使用APICloud混合开发

    APICloud是一款强大的移动应用开发平台,它允许开发者使用JavaScript进行Hybrid App(混合应用)的开发,同时结合原生的iOS和Android功能,实现高效、便捷的跨平台开发。混合开发模式结合了Web开发的灵活性和原生...

Global site tag (gtag.js) - Google Analytics