基于JPush的本地推送(iOS/Android)

    正在写的App中一个本地推送需求,工作日时每天定时推送提醒,iOS端写完已经许久,至此才磕磕绊绊写出Android端的实现,特记录于此.

    基于JPush,没有集成JPush的就不用往下看了...


Android:

/**

* 添加一条本地推送

*@parammContext上下文

*@paramtimeStr提醒时间 HH:mm

*@paramtitle推送标题

*@paramcontent推送内容

*@paramweekStr工作日字符串 格式:0000011 0:工作 1:不工作

*/

public static voidaddPush(Context mContext,String timeStr,String title,String content,String weekStr)

{

if(timeStr ==null|| timeStr.equals(""))

{

Log.e("LocalNotificationUtil","timeStr为空,无法设置本地推送");

return;

}

SimpleDateFormat dateFormat1 =newSimpleDateFormat("HH:mm");

SimpleDateFormat dateFormat2 =newSimpleDateFormat("yyyyMMdd");

SimpleDateFormat dateFormat3 =newSimpleDateFormat("yyyyMMdd HH:mm:ss");

Date nowDate =newDate();

//根据传入的时间计算出

//获取今天星期几

String week = WeekUtil.getWeekFormDate(nowDate);

//获取今天的推送时间

String dayStr = dateFormat2.format(nowDate);

//拼接

String notifyDateStr = dayStr+" "+timeStr +":00";

Date notifyDate  =null;

try{

notifyDate = dateFormat3.parse(notifyDateStr);

}catch(ParseException e) {

e.printStackTrace();

}

if(notifyDate ==null)

{

return;

}

intindex =0;

if(week.equals("星期一"))

{

index =0;

}

if(week.equals("星期二"))

{

index =1;

}

if(week.equals("星期三"))

{

index =2;

}

if(week.equals("星期四"))

{

index =3;

}

if(week.equals("星期五"))

{

index =4;

}

if(week.equals("星期六"))

{

index =5;

}

if(week.equals("星期天"))

{

index =6;

}

//对工作日按当前星期几进行重新排序

List weekList =newArrayList<>();

for(inti = index;i < weekStr.length();i++) {

String isWork = weekStr.substring(i,i+1);

weekList.add(isWork);

}

for(inti =0;i < index;i++) {

String isWork = weekStr.substring(i,i+1);

weekList.add(isWork);

}

intoneDayTime =1000*24*60*60;

JPushLocalNotification ln =newJPushLocalNotification();

ln.setBuilderId(0);

ln.setContent(content);

ln.setTitle(title);

Map map =newHashMap();

map.put("name","jpush");

map.put("test","111");

JSONObject json =newJSONObject(map);

ln.setExtras(json.toString());

for(inti =0;i < weekList.size();i++) {

if(weekList.get(i).equals("0"))

{

//上班--设置推送

Date trueNotifyDate =newDate(notifyDate.getTime()+oneDayTime*i);

//早于当前时间的推送,不注册

if(trueNotifyDate.after(nowDate))

{

ln.setBroadcastTime(trueNotifyDate);

//需要为每个推送设置不同的ID,否则推送只有第一条会生效

ln.setNotificationId(trueNotifyDate.getTime());

JPushInterface.addLocalNotification(mContext,ln);

}

}

}

}


iOS:

/**

//注册本地通知

@param IdString id

@param contentString 内容

@param dateString 日期

@param workDaysArray 工作日

*/

+ (void)setLocalNotificationsWithId:(NSString*)IdString content:(NSString*)contentString date:(NSString*)dateString workDaysArray:(NSArray*)workDaysArray

{

//根据id取消原本的通知

[selfcancelLocalNotificationWithId:IdString];

//本地通知

JPushNotificationRequest*request = [[JPushNotificationRequestalloc]init];

//内容

JPushNotificationContent*content = [[JPushNotificationContentalloc]init];

//content.badge = [NSNumber numberWithInt:-1];

//触发方式

JPushNotificationTrigger*trigger = [[JPushNotificationTriggeralloc]init];

trigger.repeat=YES;

NSDateComponents*components = [[NSDateComponentsalloc]init];

//注册或更新推送成功回调

request.completionHandler= ^(idresult) {

if(result) {

//NSLog(@"本地通知注册成功");

}else

{

NSLog(@"本地通知注册失败");

}

};

for(intj =0; j < workDaysArray.count; j++) {

//设置通知内容

content.body= contentString;

request.content= content;

//设置通知时间

NSString*hourString = [dateStringcomponentsSeparatedByString:@":"][0];

NSString*minuteString = [dateStringcomponentsSeparatedByString:@":"][1];

components.hour= [hourStringintegerValue];

components.minute= [minuteStringintegerValue];

request.requestIdentifier= [NSStringstringWithFormat:@"%@_%d",IdString,j];

components.weekday= [selfparserWeekStringToInt:workDaysArray[j]];

trigger.dateComponents= components;

request.trigger= trigger;

[JPUSHServiceaddNotification:request];

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,269评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,853评论 18 399
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,792评论 0 33
  • 不支持上传文件,所以就复制过来了。作者信息什么的都没删。对前端基本属于一窍不通,所以没有任何修改,反正用着没问题就...
    全栈在路上阅读 2,017评论 0 2
  • 之前好长一段时间没有参加培训,这次三天的培训让我感触良多。 首先是手机。培训的时候我们放下手机,这是为何?放下手机...
    沈斌Q阅读 306评论 0 0