package com.ifish.jpush.push.model.notification; import java.util.Map; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonPrimitive; import com.ifish.jpush.common.ServiceHelper; /** * APNs 通知类 *

* 支持 APNs 默认的几个参数: *

  • alert: 继承自父类 PlatformNotification 的 alert 属性;本类设置则覆盖。
  • *
  • badge: 支持 setBadge(int) 方法来设置;支持 incrBadge(int) 方法来增加。
  • *
  • sound: 支持 setSound(string) 方法来设置声音文件。
  • *
  • content-available: 用来支持后台推送。如果该值赋值为 1,表示开启后台推送。
  • *
  • extras: JSON object. 支持更多的自定义字段信息。
  • *

    *

    * 需要特别留意的是,JPush SDK 会对以下几个值有特别的默认设置考虑: *

  • badge: 默认为 "+1"。如果需要取消 badge 值,需要显式地调用 disableBadge().
  • *
  • sound: 默认为 "",即默认的声音提示。如果需要取消 sound 值,即不要声音,需要显式地调用 disableSound().
  • *

    */ public class IosNotification extends PlatformNotification { public static final String NOTIFICATION_IOS = "ios"; private static final String DEFAULT_SOUND = ""; private static final String DEFAULT_BADGE = "+1"; private static final String BADGE = "badge"; private static final String SOUND = "sound"; private static final String CONTENT_AVAILABLE = "content-available"; private static final String CATEGORY = "category"; private static final String ALERT_VALID_BADGE = "Badge number should be 0~99999, " + "and can be prefixed with + to add, - to minus"; private final boolean soundDisabled; private final boolean badgeDisabled; private final String sound; private final String badge; private final boolean contentAvailable; private final String category; private IosNotification(Object alert, String sound, String badge, boolean contentAvailable, boolean soundDisabled, boolean badgeDisabled, String category, Map extras, Map numberExtras, Map booleanExtras, Map jsonExtras) { super(alert, extras, numberExtras, booleanExtras, jsonExtras); this.sound = sound; this.badge = badge; this.contentAvailable = contentAvailable; this.soundDisabled = soundDisabled; this.badgeDisabled = badgeDisabled; this.category = category; } public static Builder newBuilder() { return new Builder(); } public static IosNotification alert(String alert) { return newBuilder().setAlert(alert).build(); } @Override public String getPlatform() { return NOTIFICATION_IOS; } @Override public JsonElement toJSON() { JsonObject json = super.toJSON().getAsJsonObject(); if (!badgeDisabled) { if (null != badge) { json.add(BADGE, new JsonPrimitive(this.badge)); } else { json.add(BADGE, new JsonPrimitive(DEFAULT_BADGE)); } } if (!soundDisabled) { if (null != sound) { json.add(SOUND, new JsonPrimitive(sound)); } else { json.add(SOUND, new JsonPrimitive(DEFAULT_SOUND)); } } if (contentAvailable) { json.add(CONTENT_AVAILABLE, new JsonPrimitive(1)); } if (null != category) { json.add(CATEGORY, new JsonPrimitive(category)); } return json; } public static class Builder extends PlatformNotification.Builder { private String sound; private String badge; private boolean contentAvailable = false; private boolean soundDisabled = false; private boolean badgeDisabled = false; private String category; protected Builder getThis() { return this; } public Builder setSound(String sound) { this.sound = sound; return this; } public Builder disableSound() { this.soundDisabled = true; return this; } public Builder incrBadge(int badge) { if (!ServiceHelper.isValidIntBadge(Math.abs(badge))) { LOG.warn(ALERT_VALID_BADGE); return this; } if (badge >= 0) { this.badge = "+" + badge; } else { this.badge = "" + badge; } return this; } public Builder setBadge(int badge) { if (!ServiceHelper.isValidIntBadge(badge)) { LOG.warn(ALERT_VALID_BADGE); return this; } this.badge = "" + badge; return this; } /** * equals to: +1 */ public Builder autoBadge() { return incrBadge(1); } public Builder disableBadge() { this.badgeDisabled = true; return this; } public Builder setContentAvailable(boolean contentAvailable) { this.contentAvailable = contentAvailable; return this; } public Builder setCategory(String category) { this.category = category; return this; } public Builder setAlert(Object alert) { this.alert = alert; return this; } public IosNotification build() { return new IosNotification(alert, sound, badge, contentAvailable, soundDisabled, badgeDisabled, category, extrasBuilder, numberExtrasBuilder, booleanExtrasBuilder, jsonExtrasBuilder); } } }