• 关于

    String类的判断功能

    的搜索结果

问题

最全Android开发常用工具类 热:报错

kun坤 2020-06-06 16:33:25 0 浏览量 回答数 1

问题

JAVA带参用测试类的编程

蛮大人123 2019-12-01 19:56:59 1085 浏览量 回答数 1

问题

使用 ASM 实现 Java 语言的“多重继承”:报错

kun坤 2020-06-06 15:29:41 0 浏览量 回答数 1

阿里云试用中心,为您提供0门槛上云实践机会!

0元试用32+款产品,最高免费12个月!拨打95187-1,咨询专业上云建议!

回答

自己实现AuthorizingRealm类,然后验证用户和权限,这里需要自己实现功能,跟数据库交互的。 /** * 自定义Realm 处理登录 权限 * * @author ruoyi */ public class UserRealm extends AuthorizingRealm { private static final Logger log = LoggerFactory.getLogger(UserRealm.class); @Autowired private IMenuService menuService; @Autowired private IRoleService roleService; @Autowired private LoginService loginService; /** * 授权 */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) { Long userId = ShiroUtils.getUserId(); SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); // 角色加入AuthorizationInfo认证对象 info.setRoles(roleService.selectRoleKeys(userId)); // 权限加入AuthorizationInfo认证对象 info.setStringPermissions(menuService.selectPermsByUserId(userId)); return info; } /** * 登录认证 */ @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { UsernamePasswordToken upToken = (UsernamePasswordToken) token; String username = upToken.getUsername(); String password = ""; if (upToken.getPassword() != null) { password = new String(upToken.getPassword()); } User user = null; try { user = loginService.login(username, password); } catch (UserNotExistsException e) { throw new UnknownAccountException(e.getMessage(), e); } catch (UserPasswordNotMatchException e) { throw new IncorrectCredentialsException(e.getMessage(), e); } catch (UserPasswordRetryLimitExceedException e) { throw new ExcessiveAttemptsException(e.getMessage(), e); } catch (UserBlockedException e) { throw new LockedAccountException(e.getMessage(), e); } catch (RoleBlockedException e) { throw new LockedAccountException(e.getMessage(), e); } catch (Exception e) { log.info("对用户[" + username + "]进行登录验证..验证未通过{}", e.getMessage()); throw new AuthenticationException(e.getMessage(), e); } SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, password, getName()); return info; } }  ######手动判断 抛出异常。 自己比对密码######你怕是需要好好了解下shiro。 CredentialsMatcher: /** * Returns {@code true} if the provided token credentials match the stored account credentials, * {@code false} otherwise. * * @param token the {@code AuthenticationToken} submitted during the authentication attempt * @param info the {@code AuthenticationInfo} stored in the system. * @return {@code true} if the provided token credentials match the stored account credentials, * {@code false} otherwise. / boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info);   SimpleAuthenticationInfo: /* * Constructor that takes in a single 'primary' principal of the account, its corresponding hashed credentials, * the salt used to hash the credentials, and the name of the realm to associate with the principals. * <p/> * This is a convenience constructor and will construct a {@link PrincipalCollection PrincipalCollection} based * on the <code>principal</code> and <code>realmName</code> argument. * * @param principal the 'primary' principal associated with the specified realm. * @param hashedCredentials the hashed credentials that verify the given principal. * @param credentialsSalt the salt used when hashing the given hashedCredentials * @param realmName the realm from where the principal and credentials were acquired. * @see org.apache.shiro.authc.credential.HashedCredentialsMatcher HashedCredentialsMatcher * @since 1.1 / public SimpleAuthenticationInfo(Object principal, Object hashedCredentials, ByteSource credentialsSalt, String realmName) 综上,先获得登录的AuthenticationInfo(目标) 然后将其提供给CredentialsMatcher进行比对验证信息######问题拖得再久 也是要解决的 qaq ...  我想问的问题是 shiro 怎么跟数据库关联起来做验证的 ... 今天 low 了一眼 shiro 源码,发现了一个 JdbcRealm 这个类 贴一下我关注的内容 /* * The default query used to retrieve account data for the user. */ protected static final String DEFAULT_AUTHENTICATION_QUERY = "select password from users where username = ?"; /** * The default query used to retrieve account data for the user when {@link #saltStyle} is COLUMN. */ protected static final String DEFAULT_SALTED_AUTHENTICATION_QUERY = "select password, password_salt from users where username = ?"; /** * The default query used to retrieve the roles that apply to a user. */ protected static final String DEFAULT_USER_ROLES_QUERY = "select role_name from user_roles where username = ?"; /** * The default query used to retrieve permissions that apply to a particular role. */ protected static final String DEFAULT_PERMISSIONS_QUERY = "select permission from roles_permissions where role_name = ?"; 可以发现 与数据库管理的认证 shiro 确实是已经实现了,默认的查询 users,user_roles,roles_permissions 确认的用户权限,可以继承这个类实现自己的认证需求,像 shiro 中  SaltAwareJdbcRealm 类就是继承的 JdbcRealm 实现的认证。######一切基于 AuthorizingRealm   doGetAuthenticationInfo 此方法是判断用户是否合法。你可以注入一个dao读取数据库来判断token登录是否合法。登录成功获取用户权限,我是写入session中。 doGetAuthorizationInfo 此方法是取用户的权限列表。我是从session中读取出来    

kun坤 2020-06-03 11:34:27 0 浏览量 回答数 0

回答

自己判断男女然后insert的时候大写不行吗?###### 你插入数据库之前用String类的toUpperCase()方法将字符串转换为大写字母不就得了######回复 @Scott3 : toUpperCase()这个方法是JRE的核心API,不太可能出现问题。你这种情况,我猜测是不是你建立数据库的时候设置的字符编码属性有问题。比如如果你设置成utf-8_ci的话,数据库本身就不支持区分大小写了######这个方法用了,好像没有出现理想的功能。这可如何是好?

kun坤 2020-06-07 16:54:38 0 浏览量 回答数 0

问题

Java-SDK之如何实现管理Bucket?

青衫无名 2019-12-01 21:39:33 1239 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);

2019-12-01 23:11:49 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);

2019-12-01 23:11:49 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);

2019-12-01 23:11:48 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);

2019-12-01 23:11:47 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);

2019-12-01 23:11:46 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);

2019-12-01 23:11:47 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);

2019-12-01 23:11:49 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);

2019-12-01 23:11:46 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);

2019-12-01 23:11:48 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档Android API Android SDK最新版本v3.0.11。 Android参考Demo。 API索引: 1. CloudPushSDK接口 1.1 基本设置 SDK注册SDK动态注册启动信息统计获取设备标识设置日志等级动态设置appKey动态设置appSecret打开推送通道关闭推送通道查询推送通道状态设置接收消息IntentService 1.2 账号API 绑定账号解绑账号 1.3 标签API 绑定标签解绑标签查询标签 1.4 别名API 添加别名删除别名查询别名 1.5 通知设置API 设置通知声音设置通知栏图标设置状态栏图标设置免打扰时段关闭免打扰功能删除所有通知接口 1.6 自建通知统计上报API 自建通知点击上报接口自建通知删除上报接口 1.7 电话API 绑定电话解绑电话 2. MessageReceiver/AliyunMessageIntentService相关接口 2.1 消息接收回调2.2 通知接收回调2.3 通知打开回调2.4 无跳转逻辑通知打开回调2.5 通知在应用内到达回调 3. 自定义样式通知相关接口 3.1 客户端设置通知样式3.2 后端推送消息时添加自定义样式id3.3 Example BasicCustomNotification ExampleAdvancedCustomNotification ExampleOpenAPI Example 3.4 BacisCustomNotificaiton API 默认构造函数构造函数获取状态栏图标设置状态栏图标获取提醒方式设置提醒方式获取Notification Flags参数设置Notificaiton Flags参数获取是否服务端设置优先设置是否服务端优先获取推送前台到达否创建通知参数设置推送前台到达否创建通知参数 3.5 AdvancedCustomNotification API 构造函数设置通知图标获取通知图标 3.6 CustomNotificationBuilder API 获取CustomNotificationBuilder实例注册自定义样式通知 1. CloudPushService接口 以下接口调用时,如有回调,均为异步执行,且回调不能为空。 1.1基本设置 SDK注册 初始化推送SDK,关联到云通道。 参数 context 应用上下文(需要ApplicationContext)callback 回调 void register(Context context, CommonCallback callback); SDK动态注册接口 支持动态设置appKey,appSecret的注册接口 参数 context 应用上下文(需要ApplicationContext)appKey appSecretcallback 回调 void register(Context context, String appKey, String appSecret, CommonCallback callback); 启动信息统计 统计App启动信息。 void onAppStart(); 获取设备标识 获取设备唯一标识。 返回 设备唯一标识。 String getDeviceId(); 设置日志等级 需要在通道初始化之前设置;默认日志等级为CloudPushService.ERROR; 参数 logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log) void setLogLevel(int logLevel); V2.3.6及以上版本支持)" class="reference-link">动态设置appKey(V2.3.6及以上版本支持) 动态设置appKey无需在manifest配置appKey务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appKey 需要设置的appKey void setAppKey(String appKey); V2.3.6及以上版本支持)" class="reference-link">动态设置appSecret(V2.3.6及以上版本支持) 动态设置appSecret无需在manifest配置appSecret务必在调用register注册接口之前调用该接口,否则动态设置失效 参数 appSecret 需要设置的appSecret void setAppSecret(String appSecret); V3.0.3及以上版本支持)" class="reference-link">打开推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态打开推送通道全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOnPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">关闭推送通道(V3.0.3及以上版本支持) 用于在程序运行时动态关闭推送通道全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效 参数 callback 回调 void turnOffPushChannel(CommonCallback callback); V3.0.3及以上版本支持)" class="reference-link">查询推送通道状态(V3.0.3及以上版本支持) app运行时查询当前推送通道状态如果当前为打开状态,则通过callback.success(String response)回调传入’on’;反之则传入’off’ 参数 callback 回调 void checkPushChannelStatus(CommonCallback callback); V3.0.10及以上版本支持)" class="reference-link">设置消息接收IntentService(V3.0.10及以上版本支持) 通过IntentService组件接收消息回调设置后消息将通过该组件透出,不再通过MessageReceiver设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法 参数 messageIntentService 自定义接收消息IntentService的class void setPushIntentService(Class messageIntentService); 1.2 账号API 绑定账号 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;设备只能绑定一个账号,同一账号可以绑定到多个设备;同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;账户名设置支持64字节。 参数 account 绑定账号名callback 回调 void bindAccount(String account, CommonCallback callback); 解绑账号 将应用内账号和推送通道取消关联。 参数 callback 回调 void unbindAccount(CommonCallback callback); 1.3 标签API 绑定标签 绑定标签到指定目标;支持向设备、账号和别名绑定标签,绑定类型由参数target指定;绑定标签在10分钟内生效;App最多支持绑定1万个标签,单个标签最大支持128字符。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void bindTag(int target, String[] tags, String alias, CommonCallback callback); 解绑标签 解绑指定目标标签;支持解绑设备、账号和别名标签,解绑类型由参数target指定;解绑标签在10分钟内生效;解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。 参数 target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名tags 标签(数组输入)alias 别名(仅当target = 3时生效)callback 回调 void unbindTag(int target, String[] tags, String alias, CommonCallback callback); 查询标签 查询目标绑定标签,当前仅支持查询设备标签;查询结果可从回调onSuccess(response)的response获取;标签绑定成功且生效(10分钟内)后即可查询。 参数 target 目标类型,1: 本设备target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;callback 回调 void listTags(int target, CommonCallback callback); 1.4 别名API 添加别名 设备添加别名;单个设备最多添加128个别名,且同一别名最多添加到128个设备;别名支持128字节。 参数 alias 别名callback 回调 void addAlias(String alias, CommonCallback callback); 删除别名 删除设备别名;支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。 参数 alias 别名(alias = null or alias.length = 0时,删除设备全部别名)callback 回调 void removeAlias(String alias, CommonCallback callback); 查询别名 查询设备别名;查询结果可从回调onSuccess(response)的response中获取;从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。 参数 callback 回调 void listAliases(CommonCallback callback); 1.5 通知设置API 设置通知声音 设置推送通知声音文件路径;若不调用本接口,默认获取资源id为R.raw.alicloud_notification_sound的资源文件;若没有获取到指定声音文件,取设备设置的消息声音。 参数 filePath 通知声音文件路径 void setNotificationSoundFilePath(String filePath); 设置通知栏图标 设置推送通知栏图标资源Bitmap。若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;若没有获取到指定图标文件,取App启动图标。 参数 icon 图标资源Bitmap void setNotificationLargeIcon(Bitmap icon); 设置状态栏图标 设置推送状态栏图标资源Id;若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;若没有获取到指定资源文件Id,取App启动图标。 参数 iconId 图标资源Id void setNotificationSmallIcon(int iconId); 设置免打扰时段 设置免打扰时间段,过滤所有通知与消息;免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)全天免打扰可以设置为”0:0-23:59”免打扰时段设置对小米辅助弹窗通知无效。 参数 startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23startMinute 免打扰起始时间(分钟),取值范围:0-59endHour 免打扰的结束时间(小时),24小时制,取值范围:0-23endMinute 免打扰结束时间(分钟),取值范围:0-59 void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback); V2.3.5及以上版本支持)" class="reference-link">关闭免打扰功能(V2.3.5及以上版本支持) 关闭后,先前设置的免打扰时段失效免打扰功能默认是关闭的没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能 void closeDoNotDisturbMode(); V2.3.7及以上版本支持)" class="reference-link">删除所有通知接口(V2.3.7及以上版本支持) 删除推送SDK创建的所有通知若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除 void clearNotifications(); V3.0.6及以上版本支持)" class="reference-link">1.6 自建通知统计上报API(V3.0.6及以上版本支持) 本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。 自建通知点击上报接口 上报自建通知的点击事件请确保同一消息仅上报一次 参数 message 要上报点击事件的消息实例 void clickMessage(CPushMessage message); 自建通知删除上报接口 上报自建通知的删除事件请确保同一消息仅上报一次 参数 message 要上报删除事件的消息实例 void dismissMessage(CPushMessage message); V3.0.11及以上版本支持)" class="reference-link">1.7 电话API(V3.0.11及以上版本支持) 为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合。 为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。 绑定电话号将设备与电话号绑定 参数 phoneNumber 要绑定的手机号callback 回调 void bindPhoneNumber(String phoneNumber, CommonCallback callback); 解绑电话号解除当前设备与电话号的绑定关系 参数 callback 回调 void unbindPhoneNumber(CommonCallback callback); 2. MessageReceiver/AliyunMessageIntentService 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。 使用方法: MessageReceiver 继承com.alibaba.sdk.android.push.MessageReceiver;在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。 <!--消息接收监听器--><receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver"> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/> </intent-filter> ... ...</receiver> AliyunMessageIntentService 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法在Manifest中注册该service <service android:name="MyPushIntentService" > <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" /> </intent-filter> <intent-filter> <action android:name="com.alibaba.sdk.android.push.RECEIVE" /> </intent-filter> </service> 消息接收回调 用于接收服务端推送的消息。消息不会弹窗,而是回调该方法。 参数 context 上下文环境message CPushMessage类型,可以获取消息Id、消息标题和内容。 void onMessage(Context context, CPushMessage message); 通知接收回调 客户端接收到通知后,回调该方法。可获取到并处理通知相关的参数。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotification(Context context, String title, String summary, Map<String, String> extraMap) 通知打开回调 打开通知时会回调该方法,通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationOpened(Context context, String title, String summary, String extraMap); 无跳转逻辑通知打开回调 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数,包括部分系统自带参数: _ALIYUN_NOTIFICATION_ID_(V2.3.5及以上):创建通知对应id_ALIYUN_NOTIFICATION_PRIORITY_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置 void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap); 通知删除回调 删除通知时回调该方法,通知删除上报由SDK自动完成。 参数 context 上下文环境messageId 删除通知的Id void onNotificationRemoved(Context context, String messageId); 通知在应用内到达回调 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持) 参数 context 上下文环境title 通知标题summary 通知内容extraMap 通知额外参数openType 原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑openActivity 所要打开的activity的名称,仅当openType=2时有效,其余情况为nullopenUrl 所要打开的URL,仅当openType=3时有效,其余情况为null void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl); V2.3.3及以上版本开始支持)" class="reference-link">3. 自定义样式通知(V2.3.3及以上版本开始支持)Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分: 3.1 客户端设置通知样式 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式具体使用例子请参考Demo 3.2 后端推送消息时添加自定义样式id 用户利用OpenApi推送消息时设定特定样式的id服务端不能设置样式,只能指定需要展现的样式id指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知 3.3 Example BasicCustomPushNotification" class="reference-link">Example-BasicCustomPushNotificationBasicCustomPushNotification notification = new BasicCustomPushNotification();notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification); AdvancedCustomPushNotification" class="reference-link">Example-AdvancedCustomPushNotificationAdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);notification.setServerOptionFirst(true);notification.setBuildWhenAppInForeground(false);boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification); OpenApi" class="reference-link">Example-OpenApi客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");final String date = dateFormat.format(new Date());PushRequest pushRequest = new PushRequest();// 推送目标pushRequest.setAppKey(appKey);pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部pushRequest.setTargetValue("deviceId"); // 推送配置pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知pushRequest.setTitle(date); // 消息的标题pushRequest.setBody("PushRequest body"); // 消息的内容pushRequest.setSummary("PushRequest summary"); // 通知的摘要pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100// 推送配置: AndroidpushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 urlpushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}"); 3.4 BasicCustomPushNotification API 默认构造函数 BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。 public BasicCustomPushNotification(); 构造函数参数 drawable 状态栏图标flags NotificationFlags,支持系统Notification下的Flag参数remindType 提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public BasicCustomPushNotification(int drawable, int flags, int remindType); 获取状态栏图标 获取已设置的状态栏图标 public int getStatusBarDrawable() 设置状态栏图标 更改状态栏图标设置 参数 statusBarDrawable 状态栏图标资源id public void setStatusBarDrawable(int statusBarDrawable); 获取提醒方式 获取已经设置的提醒方式 public int getRemindType(); 设置提醒方式 更改自定义通知的提醒方式 参数 remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动 public void setRemindType(int remindType); 获取Notification Flags参数 获取已经设置的notification flag参数 public int getNotificationFlags(); 设置Notification Flags参数 更改自定义通知的flags参数 参数 notificationFlags 支持系统自带的Notification Flag参数 public void setNotificationFlags(int notificationFlags); 获取是否服务端设置优先 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false public boolean isServerOptionFirst(); 设置是否服务端优先 更改自定义通知的serverOptionFirst参数 参数 serverOptionFirst 是否服务器配置优先 public void setServerOptionFirst(boolean serverOptionFirst); 获取推送前台到达否创建通知参数 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知 public boolean isBuildWhenAppInForeground(); 设置推送前台到达否创建通知参数 更改当推送到达时应用处在前台情况下是否创建通知的设置 参数 buildWhenAppInForeground 是否创建通知 public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground); 3.5 AdvancedCustomPushNotification API AdvancedCustomPushNotification是BasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。 AdvancedCustomPushNotification构造函数 AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数 参数 view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。iconViewId 自定义布局文件中icon的viewIdtitleViewId 自定义布局文件中title的viewIdcontentViewId 自定义布局文件中显示通知正文的viewId public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId); 设置通知图标 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。 参数 icon icon图标资源id public void setIcon(int icon); 获取通知图标 获取设置的通知图标 public int getIcon(); 3.6 CustomNotificationBuilder API CustomNotificationBuilder用于注册用户设定好的自定义样式通知 获取CustomNotificationBuilder实例 CustomNotificationBuilder是单例类,必须通过指定接口来获取实例 public static CustomNotificationBuilder getInstance(); 注册自定义样式通知 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id 参数 customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖notification 创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null 返回 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。 public boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);

2019-12-01 23:11:49 0 浏览量 回答数 0

问题

写了一个简单的excel读取类,待扩展更新:报错

kun坤 2020-06-07 20:00:55 0 浏览量 回答数 1

问题

OSS的Gzip功能

xinglai 2019-12-01 20:24:07 15527 浏览量 回答数 4

问题

Java 序列化的高级认识 热:报错

kun坤 2020-06-07 21:41:37 0 浏览量 回答数 1

问题

高级接口的使用

云栖大讲堂 2019-12-01 21:08:59 1628 浏览量 回答数 1

问题

Java基础

游客pklijor6gytpx 2019-12-01 22:02:53 69 浏览量 回答数 1

问题

Android数据库框架-Archiver(LiteOrm)的使用?报错

爱吃鱼的程序员 2020-06-12 14:43:40 2 浏览量 回答数 1

回答

package org.jeecgframework.poi.util; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.util.CellRangeAddress; import org.jeecgframework.poi.excel.entity.params.MergeEntity; /** * 纵向合并单元格工具类 * @author JueYue * @date 2015年6月21日 上午11:21:40 */ public final class PoiMergeCellUtil { private PoiMergeCellUtil() { } /** * 纵向合并相同内容的单元格 * * @param sheet * @param mergeMap key--列,value--依赖的列,没有传空 * @param startRow 开始行 */ public static void mergeCells(Sheet sheet, Map<Integer, int[]> mergeMap, int startRow) { Map<Integer, MergeEntity> mergeDataMap = new HashMap<Integer, MergeEntity>(); if (mergeMap.size() == 0) { return; } Row row; Set<Integer> sets = mergeMap.keySet(); String text; for (int i = startRow; i <= sheet.getLastRowNum(); i++) { row = sheet.getRow(i); for (Integer index : sets) { if (row.getCell(index) == null) { mergeDataMap.get(index).setEndRow(i); } else { text = row.getCell(index).getStringCellValue(); if (StringUtils.isNotEmpty(text)) { hanlderMergeCells(index, i, text, mergeDataMap, sheet, row.getCell(index), mergeMap.get(index)); } else { mergeCellOrContinue(index, mergeDataMap, sheet); } } } } if (mergeDataMap.size() > 0) { for (Integer index : mergeDataMap.keySet()) { sheet.addMergedRegion(new CellRangeAddress(mergeDataMap.get(index).getStartRow(), mergeDataMap.get(index).getEndRow(), index, index)); } } } /** * 处理合并单元格 * * @param index * @param rowNum * @param text * @param mergeDataMap * @param sheet * @param cell * @param delys */ private static void hanlderMergeCells(Integer index, int rowNum, String text, Map<Integer, MergeEntity> mergeDataMap, Sheet sheet, Cell cell, int[] delys) { if (mergeDataMap.containsKey(index)) { if (checkIsEqualByCellContents(mergeDataMap.get(index), text, cell, delys, rowNum)) { mergeDataMap.get(index).setEndRow(rowNum); } else { sheet.addMergedRegion(new CellRangeAddress(mergeDataMap.get(index).getStartRow(), mergeDataMap.get(index).getEndRow(), index, index)); mergeDataMap.put(index, createMergeEntity(text, rowNum, cell, delys)); } } else { mergeDataMap.put(index, createMergeEntity(text, rowNum, cell, delys)); } } /** * 字符为空的情况下判断 * * @param index * @param mergeDataMap * @param sheet */ private static void mergeCellOrContinue(Integer index, Map<Integer, MergeEntity> mergeDataMap, Sheet sheet) { if (mergeDataMap.containsKey(index) && mergeDataMap.get(index).getEndRow() != mergeDataMap.get(index).getStartRow()) { sheet.addMergedRegion(new CellRangeAddress(mergeDataMap.get(index).getStartRow(), mergeDataMap.get(index).getEndRow(), index, index)); mergeDataMap.remove(index); } } private static MergeEntity createMergeEntity(String text, int rowNum, Cell cell, int[] delys) { MergeEntity mergeEntity = new MergeEntity(text, rowNum, rowNum); List<String> list = new ArrayList<String>(delys.length); mergeEntity.setRelyList(list); for (int i = 0; i < delys.length; i++) { list.add(getCellNotNullText(cell, delys[i], rowNum)); } return mergeEntity; } private static boolean checkIsEqualByCellContents(MergeEntity mergeEntity, String text, Cell cell, int[] delys, int rowNum) { // 没有依赖关系 if (delys == null || delys.length == 0) { return mergeEntity.getText().equals(text); } // 存在依赖关系 if (mergeEntity.getText().equals(text)) { for (int i = 0; i < delys.length; i++) { if (!getCellNotNullText(cell, delys[i], rowNum).equals( mergeEntity.getRelyList().get(i))) { return false; } } return true; } return false; } /** * 获取一个单元格的值,确保这个单元格必须有值,不然向上查询 * * @param cell * @param index * @param rowNum * @return */ private static String getCellNotNullText(Cell cell, int index, int rowNum) { String temp = cell.getRow().getCell(index).getStringCellValue(); while (StringUtils.isEmpty(temp)) { temp = cell.getRow().getSheet().getRow(--rowNum).getCell(index).getStringCellValue(); } return temp; } } 之前版本模板没有合并单元格的属性,现在把那段功能提出出来了,你可以直接使用下  ######你好,请问下你用jxls怎么动态合并的单元格######不用这个了 我用了jxls实现了 感觉那个好用些######合并what?一列同样的数据吗?######类似这种效果 http://blog.csdn.net/hu_shengyang/article/details/6736816######全部显示 “一手”######你看第一张图的 “手别” 应该要合并的

kun坤 2020-06-09 09:30:53 0 浏览量 回答数 0

问题

Java 处理 XML 的三种主流技术及介绍:报错

kun坤 2020-06-09 23:26:43 0 浏览量 回答数 1

问题

sojson出品shiro-demo心得? 400 报错

爱吃鱼的程序员 2020-06-01 11:45:13 0 浏览量 回答数 1

回答

import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; public class Calculation extends JFrame implements ActionListener{ private JTextField txfResult;//显示操作结果的文本框 JTextField txfM;//显示记忆的索引值的文本框 Double dM=0d;//存储数据 public Calculation() { super("swing 计算器实例"); /*设置用于显示的文本框*/ txfResult =new JTextField("0",30);//初始文本显示0 最大列数30 txfResult.setBackground(Color.WHITE); txfResult.setHorizontalAlignment(JTextField.RIGHT);//数字在文本框中靠右显示 txfResult.setEditable(false);//文本框不可编辑 即为readOnly只读属性 JPanel ResultTextPanel=new JPanel();//放操作结果文本框的面板 ResultTextPanel.add(txfResult); /*设置用于控制数字的键与显示记忆索引值的文本框*/ txfM=new JTextField(2);//最长2列 JButton b1=new JButton("Backspace");//退格键 JButton b2=new JButton("CE");//重置键 JButton b3=new JButton("C");//清0键 JPanel ControlPanel=new JPanel(); ControlPanel.setLayout(new GridLayout(1, 4, 2, 2));//1行4列 水平间距2 垂直间距2 ControlPanel.add(txfM); ControlPanel.add(b1); ControlPanel.add(b2); ControlPanel.add(b3); b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); /*数字和运算符键*/ String dcKey[]= {"MC","7","8","9","/","sqrt","MR","4","5","6","*","%","MS","1","2","3","-","1/x" ,"M+","0","+/-",".","+","="}; JPanel dcKeyPanel =new JPanel();//数字和运算符的面板 dcKeyPanel.setLayout(new GridLayout(4, 6,2,2)); //一个 循环放好所有数字和运算符组件 for(int i=0;i<24;i++) { JButton b=new JButton(dcKey[i]); dcKeyPanel.add(b); b.addActionListener(this); } Container ct=this.getContentPane();//窗体内容面板对象 ct.setLayout(new BorderLayout()); ct.add(ResultTextPanel,BorderLayout.NORTH); ct.add(ControlPanel,BorderLayout.CENTER); ct.add(dcKeyPanel,BorderLayout.SOUTH); pack(); setVisible(true); setResizable(false);//禁止最大化 setLocationRelativeTo(null);//居中显示 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { new Calculation(); } //////////////////////////////////////////////////////数字键和功能键的实现///////////////////////////////////////////////////////// private boolean newDigital=true;//类内全局boolean变量 用于表示是否是输入数的标志 private String operation="";//表示运算符的字符串 private double d1;//二元运算前操数 private double d2;//二元运算后操作数 private int optionValue;//区别加减乘除运算符的变量 /*监听方法*/ @Override public void actionPerformed(ActionEvent e) { String s=(e.getActionCommand());//返回与此动作相关的命令字符串 就是button上显示的字 String str=txfResult.getText(); /*后退键*/ if(s.equals("Backspace")) { if(str.equals("0")||str.equals("")) {//已经是清0状态下 不可再清0了 return; } String s1=txfResult.getText(); txfResult.setText(s1.substring(0, s1.length()-1));//截掉最后一个数字 } /*重置键*/ if(s.equals("CE")) { txfResult.setText("0"); newDigital=true;//是否是新输入的数的标志设置为true } /*清0键*/ if(s.equals("C")) { txfResult.setText("0"); optionValue=0;//表示运算符的变量设置为0 newDigital=true;//表示是否新输入的数的标志设置为true } /*数字键*/ if(s.length()==1&&s.charAt(0)>='0'&&s.charAt(0)<='9') { if(!newDigital) { txfResult.setText(str+s);//不是新输入的数 }else { txfResult.setText(s); newDigital=false;//表示是否新输入的数的标志设置为false } return; } /*小数点*/ if(s.equals(".")) { if(txfResult.getText().indexOf(".")==-1) {//若之前尚不存在小数点 /*判断数字是否0打头*/ if(txfResult.getText().trim().startsWith("0")) {//强大的API txfResult.setText("0."); newDigital=false; }else { txfResult.setText(str+".");//str事件刚开始就得到的txfResult.getText() } } return; } /* 表示数字正负符号+/- */ if(s.equals("+/-")) { double d=Double.parseDouble(str.trim());//获取输入的数字 txfResult.setText(String.valueOf(-d));//取得获取输入数字的相反数 return; } //////////////////////////////////////////////////////加减乘除运算的实现///////////////////////////////////////////////////////// if(s.equals("+")) { d1=Double.parseDouble(txfResult.getText());//立刻获取前操作数的值 txfResult.setText(""); optionValue=1;//设置运算符标志 } if(s.equals("-")) { d1=Double.parseDouble(txfResult.getText()); optionValue=2; } if(s.equals("*")) { d1=Double.parseDouble(txfResult.getText()); optionValue=3; } if(s.equals("/")) { d1=Double.parseDouble(txfResult.getText()); optionValue=4; } if(s.equals("=")) { d2=Double.parseDouble(txfResult.getText());//获取后操作数的值 /*根据运算符标志的不同值确定计算结果*/ switch(optionValue) { case 1: txfResult.setText(String.valueOf(d1+d2)); break; case 2: txfResult.setText(String.valueOf(d1-d2)); break; case 3: txfResult.setText(String.valueOf(d1*d2)); break; case 4: if(d2!=0) { txfResult.setText(String.valueOf(d1/d2)); }else { txfResult.setText("除数不能为0"); return; } break; } operation="";//运算结束 清空运算符 } ////////////////////////////////求平方根 倒数 百分比运算///////////////////////////////// if(s.equals("sqrt")) { double d=Double.parseDouble(txfResult.getText().trim());//获取操作数的值 if(d>0) { txfResult.setText(String.valueOf(Math.sqrt(d)));//计算该值的平方根 }else { txfResult.setText("负数不能计算平方根"); } }else if(s.equals("1/x")) { double d=Double.parseDouble(txfResult.getText().trim());//计算倒数 if(str.equals("0")) { txfResult.setText("除数不能为0"); }else { txfResult.setText(String.valueOf(1/d)); } }else if(s.equals("%")) { txfResult.setText((String.valueOf(Double.parseDouble(str)/100))); } ///////////////////////////////////////////实现数据的记忆功能/////////////////////////////////// if(s.equals("MC")) {//清空存储数据 txfResult.setText(""); dM=0d; newDigital=true; } if(s.equals("MR")) { if(txfM.getText().trim()!="") { txfResult.setText(""+dM);//显示存储数字当前值 } } if(s.equals("MS")) { dM=Double.parseDouble(txfResult.getText().trim()); txfM.setText("M");//存储区显示M } if(s.equals("M+")) { dM=dM+Double.parseDouble(txfResult.getText().trim());//将显示的数字与已经存储的数据相加 即更新存储数据 } } }

DM。 2020-05-27 13:40:29 0 浏览量 回答数 0

回答

一、Smarty缓存的几种方式缓存机制中,分为全局缓存、部分缓存、局部缓存三种方式,后面会一一讲述,下面是缓存设置前,Smarty类方法基本目录设置如下: $smarty->Smarty(); $smarty->template_dir = $ROOT."/templates";//模板目录 $smarty->compile_dir = $ROOT."/templates_c";//编译目录 $smarty->cache_dir = $ROOT."/cache";//缓存目录 $smarty->caching = true;//是否开启缓存,值为0,1,2,0则不开启:1则开启缓存:2则可设置特殊缓存,即在加载模板页前,对局部进行缓存时间的特殊设定,后面会讲到;可不写,默认为true-开启 $smarty->cache_lifetime = "3600";//缓存时间 ,可不写,默认为3600 $smarty->compile_check = true;//是否进行编译,可不写,默认为true 缓存机制中调用模板生成缓存页面,用的一个display()方法,将会在后文中用到,这里先讲解一下: $smarty->display(string template[, string cache_id[, string compile_id]]); 第一个必须参数:template,为需显示的模板;第二个可选参数:cache_id,可指定一个缓存号,此参数是给页面缓存添加一个标识的作用;第三个可选参数:compile_id,可指定一个编译号 ,此参数是把一个模板编译成不同版本时使用,同样是起一个标识的作用,不常用。上面代码简洁、说明易懂吧!若引用创建Smarty类都不知,那下面可以省了,呵,开个玩笑!接着往下看。1、全局缓存方式定义:字面上看,意思很明了,就是为整个网站的全部页面都进行缓存生成,只要页面调用了Smarty类模板。代码实例:其实,在这段之前的基本目录设置中就讲到了,为说明,用蓝颜色标明了出来代码,只要在类中这样设置,并在页面中进行如下引用,页面即进行了缓存,$smarty->display(‘index.tpl’);而这条语句,有一个很大的缺陷,就是一个模板即一个模板页面,只生成一个缓存,而我们知道,大多网站的多数页面后面会接一些参数或不同页面调用同一个模板,比如: http://blog.unvs.cn/archives/2012_9.html http://blog.unvs.cn/archives/2012_8.html http://blog.unvs.cn/archives/2012_7.html 比方这些是调用的同一个模板生成的页面,但是又必须生成3个缓存,使用上面的语句肯定做不到,这里我们要想到一开始讲到的第二个可选参数cache_id,用一个缓存号,来区分同一个模板生成不同的页面及缓存,代码实例: $cache_id = $_GET['id'];//url中的id参数值 $smarty->display(‘index.tpl’, $cache_id);//将缓存号加入,即可完成–同一模板–不同参数–不同缓存 的功能; 到这里,有人发现,如果我的页面不止一个参数,那是不是得全部解析出来并做为缓存号?这里有一个更好的方法,推荐给大家,也是网上大多赞同的。(其实,上面一段是’废话‘,可去掉,但为了循序渐进,更好理解而写的过渡,谅)推荐的方法是:你可以直接将整个当前URL获取下来,作为cache_id加入缓存,这样无论它多少个参数,都不会存在同一个缓存页,代码实例: $url=$_SERVER['REQUEST_URI'];//获取当前页URL,有的将url进行md5加密,亦可 $smarty->display(‘index.tpl’, $url); 2、部分缓存方式定义:意思就是,网站系统的部分页面进行缓存,而一些页面不进行缓存,比方网站的注册、登录处理页面可不进行缓存。一种处理方式:在display()方法前或后面,将此模板缓存进行一次清除操作,注意保持两者参数必须一致;代码实例: $smarty->clear_cache(“index.tpl”);//此句放在display方法句前后都可以 $smarty->display(“index.tpl”);//与clear_cache方法参数必须一致 另一种处理方式:原理是一样的,因为部分缓存相当于两种情况,你可以另写一个display方法进行重构,其中一个参数判断是否进行缓存,若不,则进行clear_cache()方法处理,否则进行缓存;代码实例: function display($temp_name, $cache_id = null,$is_cache = true){ if($is_cache){ $smarty->clear_cache(“index.tpl”, $cache_id); $smarty->display(“index.tpl”, $cache_id);//此两句不解,见上面绿色代码 }else{ $smarty->display(“index.tpl”, $cache_id); }} 调用方法:self::display($temp_name, $cache_id, false);//这样设置即不进行缓存,有任何疑问可留言提出。3、局部缓存方式定义:一个页面,一些地方不进行缓存,保持动态更新,每次都加载,比如文章详细页的浏览次数、登录窗口框等。有几种可实现局部缓存的方法(反面即处理好不缓存的地方就可实现局部缓存),着重讲解1、2种方法,我觉得就可以了,不用学会那么多。a、使用SMarty引擎中内置的nocache函数,实现不缓存功能(smarty3.1.8版支持,不知smarty2+是否支持)直接在tpl或html模板页中,不缓存区域加入{nocache}不缓存内容{/nocache}即可。代码实例:处理页面:$smarty->assign("time",time());模板页面:{nocache}<{$time}>{/nocache}b、注册块方法,实现不缓存写一个no_cached方法,并调用smarty注册块函数将方法进行注册,即可实现,直接贴实例。代码实例: 处理页面:$smarty->assign("time",time()); function no_cached($param, $content){//参数$param为块参数数组,参数$content为不缓存内容 return $content; } $smarty->register_block("no_cached", “no_cached”, false);//注册块方法:register_block($tpl_func, $reg_func, $cacheable);//参数1为模板函数;参数2为需注册的函数即上面写的函数;参数3为是否进行缓存,这里必须设置为false 模板页面:{no_cached}<{$time}>{/no_cached} c、当然还有其他一些方法,比如:注册函数等,这里就不介绍了,其中注册块详细使用,请查看smarty说明书,这里就不详述了。4、缓存机制中的is_cached用法最后,说下is_cached($temp_tpl[, $cache_id])判断是否已被缓存这个方法,$temp_tpl参数为模板页,$cache_id参数为缓存号,这个方法主要用在加载模板前进行缓存判断,若不存在就加载数据,若存在直接跳过,这样就达到了缓存的最终目的。示例: if(!smarty->is_cached(‘index.tpl’)){//不存在缓存 //调用数据库,并对变量进行赋值 } $smarty->display(‘index.tpl’);//加载模板页

小旋风柴进 2019-12-02 02:01:05 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档小米/华为/FCM系统推送支持 1. 相关概念2. 配置应用3. 下载扩展包4. Proguard配置5. 在应用中初始化辅助通道6. 在日志中查看初始化情况7. 辅助弹窗 7.1 客户端7.2 服务端7.3 场景解析 场景1:普通推送打开App + 辅助弹窗场景2:普通推送打开Activity + 辅助弹窗 1.相关概念 辅助通道:移动推送针对小米、华为设备管控较严的情况特意接入华为,小米推送辅助通道以提高在华为、小米设备上的到达率。移动推送优先选择自有通道进行推送消息下发,只有在自有通道断连时选择辅助通道下发消息。当前辅助通道通过华为、小米推送下发透传消息,消息到达应用后经移动推送SDK处理后触发onNotification,onMessage回调。小米、华为推送在下发透传消息时并不保证会拉起被杀死进程(相关机制可参考小米、华为推送官网),所以辅助通道在进程被杀死情况下无法保证消息一定到达。辅助弹窗:辅助弹窗通过系统通道下发通知,可以在进程被杀死情况下推送成功。由于辅助弹窗通过在对应设备上推送通知实现,因而通过辅助弹窗下发的通知不会触发onNotification回调。当前移动推送已接入小米、华为辅助弹窗。其中华为弹窗到达率统计只覆盖用户点击华为弹窗推送通知的场景,未点击部分暂未覆盖,小米弹窗到达率统计覆盖所有场景。 2. 配置应用 在 小米开放平台 注册你的App, 得到相应的小米AppID,小米AppKey,小米AppSecert。在控制台App详情设置你的小米AppSecert。(注意:小米开发者平台的消息推送开关记得打开)同理在 华为开发者联盟 注册App,应用审核通过后,能够得到华为的AppID和AppSecert。在控制台App详情中设置你的华为AppID和AppSecert。(注意,您的app不能是草稿状态,必须是审核中,或者通过审核的状态,不然通道不会生效。请确保您在华为控制台激活了推送通道功能)在FCM推送平台创建项目(注:Google已将GCM推送迁移至firebase,改称FCM)。接入前提手机必须安装google play services, 否则注册不成功, 大部分国内的手机是谷歌服务被剥离了: 在Firebase控制台需要先创建一个项目,然后再在项目下新增App下载对应App的google-services.json文件, 我们只需要这个json文件中的”project_number”, “mobilesdk_app_id”这两个key对应的value, 分别记录为sendId/applicationId, 下面注册过程中需要用到: 在Firebase控制台获取服务器密钥,并将其设置在移动推送控制台中的GCM/FCM服务器密钥域内。当前只支持老版服务器密钥 3. 下载扩展包3.1 手动集成将辅助通道扩展包下载解压后拷贝到你项目的Lib目录下,下载地址。如果使用辅助通道扩展包v3.0.4及以上版本,需要将推送SDK升级到v3.0.11及以上版本。新版辅助通道扩展包以aar形式透出,省却manifest文件配置,减少出错概率。 将辅助通道扩展包放置到app module的libs路径下,并在app module的build.gradle文件中添加如下配置: repositories { flatDir { dirs 'libs' //this way we can find the .aar file in libs folder }}...dependencies { ...... compile(name: 'alicloud-android-third-push-3.0.5', ext: 'aar')}3.2 Maven集成 项目顶层build.gradle中添加Maven仓库地址: allprojects { repositories { maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases/' } }} gradle添加依赖: dependencies { compile 'com.aliyun.ams:alicloud-android-third-push:3.0.5@aar'}3.3 Firebase依赖如需配置GCM/GCM通道还需要添加Firebase SDK依赖: dependencies { ...... compile ('com.google.firebase:firebase-messaging:9.6.1')}同时在AndroidManifest文件中添加如下配置: <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="com.taobao.taobao" /> </intent-filter></receiver><receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" /><service android:name="com.alibaba.sdk.android.push.AgooFirebaseInstanceIDService" android:exported="true" > <intent-filter android:priority="-500" > <action android:name="com.google.firebase.INSTANCE_ID_EVENT" /> </intent-filter></service><service android:name="com.alibaba.sdk.android.push.AgooFirebaseMessagingService" android:exported="true" > <intent-filter android:priority="-500" > <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter></service> 4. Proguard配置 如果集成推送SDK的工程开启代码混淆,在Proguard配置的基础上,需要添加以下辅助通道的Proguard配置。 # 小米通道-keep class com.xiaomi.** {*;}-dontwarn com.xiaomi.**# 华为通道-keep class com.huawei.** {*;}-dontwarn com.huawei.**# GCM/FCM通道-keep class com.google.firebase.**{*;}-dontwarn com.google.firebase.**5. 在应用中初始化辅助通道将以下代码加入你application.onCreate()方法中初始通道。注意:辅助通道注册务必在Application中执行且放在推送SDK初始化代码之后,否则可能导致辅助通道注册失败 // 注册方法会自动判断是否支持小米系统推送,如不支持会跳过注册。MiPushRegister.register(applicationContext, "小米AppID", "小米AppKey");// 注册方法会自动判断是否支持华为系统推送,如不支持会跳过注册。HuaWeiRegister.register(applicationContext);//GCM/FCM辅助通道注册GcmRegister.register(this, sendId, applicationId); //sendId/applicationId为步骤获得的参数 本方法会自动判断是否支持小米系统推送,如不支持会跳过注册。 6. 在日志中查看初始化情况华为通道初始化成功,可以看到以下日志: 11-11 22:21:33.671 30248-30324/com.xxx E/MPS:HuaWeiRegister: HuaWeiRegister checkDevice flag=true //确认是华为的手机11-11 22:21:33.674 30248-30324/com.xxx E/MPS:HuaWeiRegister﹕ Register huawei push............ //开始注册华为手机11-11 22:21:33.714 29643-30328/com.xxx E/MPS:HuaWeiRegister﹕ huawei register success,token = 08657430243125472000000411000001 小米通道初始化成功,可以看到以下日志: 12-09 22:20:39.710 19566-19566/com.xxx E/MPS:MiPushRegister: MiPushRegister checkDevice flag=true //确认是小米的手机12-09 22:20:39.712 19566-19566/com.xxx E/MPS:MiPushRegister: Register mipush. //开始注册小米12-09 22:20:40.596 19566-19733/com.xxx E/MPS:MiPushRegister: XiaoMi register success. //小米注册成功 regid=d//igwEhgBGCI2TG6lWqlCesc0I6xE1wUhNCBXQ8uNOi/dDZioYXVysbrVrvRmyEVPn9nWz92D28IzYbA1RzoGDyTzYZwXKfBHEQkrey4G8= GCM/FCM通道初始化成功,可以看到以下日志: 05-19 19:18:44.530 19153-19177/com.xxx D/MPS:GcmRegister: token from register: eWIXLYCNP0Q:APA91bFUAgxj6XYf5okyoCBnRPw1UwITndzXrvPDgbdI2N44PYm17hFEBiNXNQJrJ8bOG_xjw3c3UPDAhzNMTLNjlAKcjUanKyLA6E3k4wEmgZuhgUT02UMmMvH2LVA1L2Z4-l-cT_Ug 收到小米通道下行的消息:(需要将sdk日志等级设置到DEBUG) 12-09 22:24:34.065 19566-25042/com.xxx D/MPS:MiPushReceiver: onReceiveMessage,msg=[{"f":262,"b":"{\"content\"\ ... ... ,"i":"f__-rnje3_OH74gE|VG0g3kwMnGADAGrXZku1FFW5"}] 收到GCM/FCM通道下发的消息: 05-19 19:20:04.900 19153-20391/com.alibaba.push2 D/MPS:GcmRegister: onReceiveMessage payload msg:[......] 若小米通道注册失败(未看到小米注册成功日志),请查看系统日志(logcat设置NoFilters),以PushService|BroadcastQueue为正则式进行过滤,示例如下图: MiPushBroadcastReceiver未配置: MIPUSH_RECEIVE权限未配置: 注:如果控制台配置了小米/华为的信息,app需要加对应的jar包依赖,不然会有crash的风险。 7. 辅助弹窗 当前部分国产品牌设备管控严格,接入推送功能的App进程在后台被清理后,收不到推送通知;接入辅助弹窗后,可以借助对应品牌的系统通道,保证App后台被清理后,仍能收到推送通知;当前辅助弹窗已接入小米、华为(小米辅助弹窗:v2.3.0及以上支持;华为辅助弹窗:v3.0.8及以上支持);当前华为辅助弹窗仅支持Emotion UI(华为定制ROM)4.1级以上版本的设备; 7.1 客户端 该功能的使用需要接入推送辅助通道,确保使用最新的辅助通道扩展包,具体参考上文;辅助弹窗送达的通知展示效果,和普通通知相同;服务端指定辅助弹窗通道推送时,一定要指定通知点击后要打开的Activity,该Activity需继承自抽象类AndroidPopupActivity(MiPushSystemNotificationActivity已废弃,小米弹窗、华为弹窗统一继承AndroidPopupActivity),否则无法获取到通知的相关信息,并且会影响通知到达率的统计;AndroidPopupActivity中提供抽象方法onSysNoticeOpened(),实现该方法后可获取到辅助弹窗通知的标题、内容和额外参数,在通知点击时触发,原本的通知回调onNotification()和onNotificationOpened()不适用于辅助弹窗;指定打开的托管弹窗Activity在AndroidManifest.xml中注册时需要声明属性:android:exported=true 接入如下所示: import com.alibaba.sdk.android.push.AndroidPopupActivity;public class PopupPushActivity extends AndroidPopupActivity { static final String TAG = "PopupPushActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } /** * 实现通知打开回调方法,获取通知相关信息 * @param title 标题 * @param summary 内容 * @param extMap 额外参数 */ @Override protected void onSysNoticeOpened(String title, String summary, Map<String, String> extMap) { Log.d("OnMiPushSysNoticeOpened, title: " + title + ", content: " + summary + ", extMap: " + extMap); }}7.2 服务端 OpenAPI 2.0的推送高级接口提供了AndroidPopupActivity、AndroidPopupTitle和AndroidPopupBody三个参数,分别用于设置辅助弹窗通知打开时跳转的Activity、通知标题以及通知内容(注意:StoreOffline参数也需要设置为true);辅助弹窗仅对后台进程被清理的小米/华为设备生效,对非小米/华为设备和在线的小米/华为设备不生效;当辅助弹窗生效时,推送接口的Title、Body、AndroidActivity以及额外参数设置中的功能性设置(如声音、震动等)都不起作用;PushRequest pushRequest = new PushRequest();// 其余设置省略// ...// 0:表示消息(默认为0), 1:表示通知pushRequest.setType(1);// 标题pushRequest.setTitle(dateFormat.format(new Date()));// 内容pushRequest.setBody("PushRequest body");// 额外参数pushRequest.setAndroidExtParameters("{\"k1\":\"android\",\"k2\":\"v2\"}");// 设置辅助弹窗打开ActivitypushRequest.setAndroidPopupActivity("*****");// 设置辅助弹窗通知标题pushRequest.setAndroidPopupTitle("*****");// 设置辅助弹窗通知内容pushRequest.setAndroidPopupBody("*****"); 7.3 场景解析以下几种普通推送结合辅助弹窗推送的场景,帮助您快速理解辅助弹窗功能的配置。 客户端配置客户端有Main、Second两个Activity,MainActivity为App打开主页面,SecondActivity extends AndroidPopupActivity; 普通通知回调配置: public class MyMessageReceiver extends MessageReceiver { /** * 推送通知的回调方法 * @param context * @param title * @param summary * @param extraMap */ @Override public void onNotification(Context context, String title, String summary, Map<String, String> extraMap) { Log.d(TAG, "Receive notification, title: " + title + ", content: " + summary + ", extraMap: " + extraMap); }} MainActivity定义: package com.alibaba.push.testdemo;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { Log.d(TAG, "Main"); }} SecondActivity定义: package com.alibaba.push.testdemo;import com.alibaba.sdk.android.push.AndroidPopupActivity;public class SecondActivity extends AndroidPopupActivity { /** * 辅助弹窗指定打开Activity回调 * @param title 标题 * @param content 内容 * @param extraMap 额外参数 */ @Override protected void onSysNoticeOpened(String title, String content, Map<String, String> extraMap) { Log.d(TAG, "Receive XiaoMi notification, title: " + title + ", content: " + content + ", extraMap: " + extraMap); }}场景1:普通推送打开App + 辅助弹窗服务端配置如下: PushRequest pushRequest = new PushRequest();// 其余设置省略// ...// 0:表示消息(默认为0), 1:表示通知pushRequest.setType(1);// 标题pushRequest.setTitle("hello");// 内容pushRequest.setBody("PushRequest body");// 点击通知后动作 "APPLICATION" : 打开应用 "ACTIVITY" : 打开AndroidActivity "URL" : 打开URL "NONE" : 无跳转pushRequest.setAndroidOpenType("APPLICATION");// 设置辅助弹窗打开ActivitypushRequest.setAndroidPopupActivity("com.alibaba.push.testdemo.SecondActivity");// 设置辅助弹窗通知标题pushRequest.setAndroidPopupTitle("hello2");// 设置辅助弹窗通知内容pushRequest.setAndroidPopupBody("PushRequest body2");// 设定android类型设备通知的扩展属性pushRequest.setAndroidExtParameters("{\"k1\":\"android\",\"k2\":\"v2\"}");推送结果: 非小米、华为设备和在线小米、华为设备 收到普通推送通道弹出的通知,点击后打开App,进入首页MainActivity,如果设备在前台,保持当前界面不变;onNotification()回调输出Receive notification, title: hello, content: PushRequest body, extraMap: {k1=android, k2=v2}; 清理进程后的小米、华为设备 辅助弹窗通道弹出通知,点击后跳转到SecondActivity;onSysNoticeOpened()回调输出Receive XiaoMi notification, title: hello2, content: PushRequest body2, extraMap: {k1=android, k2=v2}; 场景2:普通推送打开Activity + 辅助弹窗服务端配置如下: PushRequest pushRequest = new PushRequest();// 其余设置省略// ...// 0:表示消息(默认为0), 1:表示通知pushRequest.setType(1);// 标题pushRequest.setTitle("hello");// 内容pushRequest.setBody("PushRequest body");// 点击通知后动作 "APPLICATION" : 打开应用 "ACTIVITY" : 打开AndroidActivity "URL" : 打开URL "NONE" : 无跳转pushRequest.setAndroidOpenType("ACTIVITY");// 指定普通推送要打开的ActivitypushRequest.setAndroidActivity("com.alibaba.push.testdemo.SecondActivity");// 设置辅助弹窗打开ActivitypushRequest.setAndroidPopupActivity("com.alibaba.push.testdemo.SecondActivity");// 设置辅助弹窗通知标题pushRequest.setAndroidPopupTitle("hello2");// 设置辅助弹窗通知内容pushRequest.setAndroidPopupBody("PushRequest body2");// 设定android类型设备通知的扩展属性pushRequest.setAndroidExtParameters("{\"k1\":\"android\",\"k2\":\"v2\"}");推送结果: 非小米、华为设备和在线小米、华为设备 收到普通推送通道弹出的通知,点击后跳转到SecondActivity;onNotification()回调输出Receive notification, title: hello, content: PushRequest body, extraMap: {k1=android, k2=v2}; 清理进程后的小米、华为设备 辅助弹窗通道弹出通知,点击后跳转到SecondActivity;onSysNoticeOpened()回调输出Receive XiaoMi notification, title: hello2, content: PushRequest body2, extraMap: {k1=android, k2=v2};

2019-12-01 23:11:50 0 浏览量 回答数 0

回答

详细解答可以参考官方帮助文档小米/华为/FCM系统推送支持 1. 相关概念2. 配置应用3. 下载扩展包4. Proguard配置5. 在应用中初始化辅助通道6. 在日志中查看初始化情况7. 辅助弹窗 7.1 客户端7.2 服务端7.3 场景解析 场景1:普通推送打开App + 辅助弹窗场景2:普通推送打开Activity + 辅助弹窗 1.相关概念 辅助通道:移动推送针对小米、华为设备管控较严的情况特意接入华为,小米推送辅助通道以提高在华为、小米设备上的到达率。移动推送优先选择自有通道进行推送消息下发,只有在自有通道断连时选择辅助通道下发消息。当前辅助通道通过华为、小米推送下发透传消息,消息到达应用后经移动推送SDK处理后触发onNotification,onMessage回调。小米、华为推送在下发透传消息时并不保证会拉起被杀死进程(相关机制可参考小米、华为推送官网),所以辅助通道在进程被杀死情况下无法保证消息一定到达。辅助弹窗:辅助弹窗通过系统通道下发通知,可以在进程被杀死情况下推送成功。由于辅助弹窗通过在对应设备上推送通知实现,因而通过辅助弹窗下发的通知不会触发onNotification回调。当前移动推送已接入小米、华为辅助弹窗。其中华为弹窗到达率统计只覆盖用户点击华为弹窗推送通知的场景,未点击部分暂未覆盖,小米弹窗到达率统计覆盖所有场景。 2. 配置应用 在 小米开放平台 注册你的App, 得到相应的小米AppID,小米AppKey,小米AppSecert。在控制台App详情设置你的小米AppSecert。(注意:小米开发者平台的消息推送开关记得打开)同理在 华为开发者联盟 注册App,应用审核通过后,能够得到华为的AppID和AppSecert。在控制台App详情中设置你的华为AppID和AppSecert。(注意,您的app不能是草稿状态,必须是审核中,或者通过审核的状态,不然通道不会生效。请确保您在华为控制台激活了推送通道功能)在FCM推送平台创建项目(注:Google已将GCM推送迁移至firebase,改称FCM)。接入前提手机必须安装google play services, 否则注册不成功, 大部分国内的手机是谷歌服务被剥离了: 在Firebase控制台需要先创建一个项目,然后再在项目下新增App下载对应App的google-services.json文件, 我们只需要这个json文件中的”project_number”, “mobilesdk_app_id”这两个key对应的value, 分别记录为sendId/applicationId, 下面注册过程中需要用到: 在Firebase控制台获取服务器密钥,并将其设置在移动推送控制台中的GCM/FCM服务器密钥域内。当前只支持老版服务器密钥 3. 下载扩展包3.1 手动集成将辅助通道扩展包下载解压后拷贝到你项目的Lib目录下,下载地址。如果使用辅助通道扩展包v3.0.4及以上版本,需要将推送SDK升级到v3.0.11及以上版本。新版辅助通道扩展包以aar形式透出,省却manifest文件配置,减少出错概率。 将辅助通道扩展包放置到app module的libs路径下,并在app module的build.gradle文件中添加如下配置: repositories { flatDir { dirs 'libs' //this way we can find the .aar file in libs folder }}...dependencies { ...... compile(name: 'alicloud-android-third-push-3.0.5', ext: 'aar')}3.2 Maven集成 项目顶层build.gradle中添加Maven仓库地址: allprojects { repositories { maven { url 'http://maven.aliyun.com/nexus/content/repositories/releases/' } }} gradle添加依赖: dependencies { compile 'com.aliyun.ams:alicloud-android-third-push:3.0.5@aar'}3.3 Firebase依赖如需配置GCM/GCM通道还需要添加Firebase SDK依赖: dependencies { ...... compile ('com.google.firebase:firebase-messaging:9.6.1')}同时在AndroidManifest文件中添加如下配置: <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND" > <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="com.taobao.taobao" /> </intent-filter></receiver><receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" /><service android:name="com.alibaba.sdk.android.push.AgooFirebaseInstanceIDService" android:exported="true" > <intent-filter android:priority="-500" > <action android:name="com.google.firebase.INSTANCE_ID_EVENT" /> </intent-filter></service><service android:name="com.alibaba.sdk.android.push.AgooFirebaseMessagingService" android:exported="true" > <intent-filter android:priority="-500" > <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter></service> 4. Proguard配置 如果集成推送SDK的工程开启代码混淆,在Proguard配置的基础上,需要添加以下辅助通道的Proguard配置。 # 小米通道-keep class com.xiaomi.** {*;}-dontwarn com.xiaomi.**# 华为通道-keep class com.huawei.** {*;}-dontwarn com.huawei.**# GCM/FCM通道-keep class com.google.firebase.**{*;}-dontwarn com.google.firebase.**5. 在应用中初始化辅助通道将以下代码加入你application.onCreate()方法中初始通道。注意:辅助通道注册务必在Application中执行且放在推送SDK初始化代码之后,否则可能导致辅助通道注册失败 // 注册方法会自动判断是否支持小米系统推送,如不支持会跳过注册。MiPushRegister.register(applicationContext, "小米AppID", "小米AppKey");// 注册方法会自动判断是否支持华为系统推送,如不支持会跳过注册。HuaWeiRegister.register(applicationContext);//GCM/FCM辅助通道注册GcmRegister.register(this, sendId, applicationId); //sendId/applicationId为步骤获得的参数 本方法会自动判断是否支持小米系统推送,如不支持会跳过注册。 6. 在日志中查看初始化情况华为通道初始化成功,可以看到以下日志: 11-11 22:21:33.671 30248-30324/com.xxx E/MPS:HuaWeiRegister: HuaWeiRegister checkDevice flag=true //确认是华为的手机11-11 22:21:33.674 30248-30324/com.xxx E/MPS:HuaWeiRegister﹕ Register huawei push............ //开始注册华为手机11-11 22:21:33.714 29643-30328/com.xxx E/MPS:HuaWeiRegister﹕ huawei register success,token = 08657430243125472000000411000001 小米通道初始化成功,可以看到以下日志: 12-09 22:20:39.710 19566-19566/com.xxx E/MPS:MiPushRegister: MiPushRegister checkDevice flag=true //确认是小米的手机12-09 22:20:39.712 19566-19566/com.xxx E/MPS:MiPushRegister: Register mipush. //开始注册小米12-09 22:20:40.596 19566-19733/com.xxx E/MPS:MiPushRegister: XiaoMi register success. //小米注册成功 regid=d//igwEhgBGCI2TG6lWqlCesc0I6xE1wUhNCBXQ8uNOi/dDZioYXVysbrVrvRmyEVPn9nWz92D28IzYbA1RzoGDyTzYZwXKfBHEQkrey4G8= GCM/FCM通道初始化成功,可以看到以下日志: 05-19 19:18:44.530 19153-19177/com.xxx D/MPS:GcmRegister: token from register: eWIXLYCNP0Q:APA91bFUAgxj6XYf5okyoCBnRPw1UwITndzXrvPDgbdI2N44PYm17hFEBiNXNQJrJ8bOG_xjw3c3UPDAhzNMTLNjlAKcjUanKyLA6E3k4wEmgZuhgUT02UMmMvH2LVA1L2Z4-l-cT_Ug 收到小米通道下行的消息:(需要将sdk日志等级设置到DEBUG) 12-09 22:24:34.065 19566-25042/com.xxx D/MPS:MiPushReceiver: onReceiveMessage,msg=[{"f":262,"b":"{\"content\"\ ... ... ,"i":"f__-rnje3_OH74gE|VG0g3kwMnGADAGrXZku1FFW5"}] 收到GCM/FCM通道下发的消息: 05-19 19:20:04.900 19153-20391/com.alibaba.push2 D/MPS:GcmRegister: onReceiveMessage payload msg:[......] 若小米通道注册失败(未看到小米注册成功日志),请查看系统日志(logcat设置NoFilters),以PushService|BroadcastQueue为正则式进行过滤,示例如下图: MiPushBroadcastReceiver未配置: MIPUSH_RECEIVE权限未配置: 注:如果控制台配置了小米/华为的信息,app需要加对应的jar包依赖,不然会有crash的风险。 7. 辅助弹窗 当前部分国产品牌设备管控严格,接入推送功能的App进程在后台被清理后,收不到推送通知;接入辅助弹窗后,可以借助对应品牌的系统通道,保证App后台被清理后,仍能收到推送通知;当前辅助弹窗已接入小米、华为(小米辅助弹窗:v2.3.0及以上支持;华为辅助弹窗:v3.0.8及以上支持);当前华为辅助弹窗仅支持Emotion UI(华为定制ROM)4.1级以上版本的设备; 7.1 客户端 该功能的使用需要接入推送辅助通道,确保使用最新的辅助通道扩展包,具体参考上文;辅助弹窗送达的通知展示效果,和普通通知相同;服务端指定辅助弹窗通道推送时,一定要指定通知点击后要打开的Activity,该Activity需继承自抽象类AndroidPopupActivity(MiPushSystemNotificationActivity已废弃,小米弹窗、华为弹窗统一继承AndroidPopupActivity),否则无法获取到通知的相关信息,并且会影响通知到达率的统计;AndroidPopupActivity中提供抽象方法onSysNoticeOpened(),实现该方法后可获取到辅助弹窗通知的标题、内容和额外参数,在通知点击时触发,原本的通知回调onNotification()和onNotificationOpened()不适用于辅助弹窗;指定打开的托管弹窗Activity在AndroidManifest.xml中注册时需要声明属性:android:exported=true 接入如下所示: import com.alibaba.sdk.android.push.AndroidPopupActivity;public class PopupPushActivity extends AndroidPopupActivity { static final String TAG = "PopupPushActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } /** * 实现通知打开回调方法,获取通知相关信息 * @param title 标题 * @param summary 内容 * @param extMap 额外参数 */ @Override protected void onSysNoticeOpened(String title, String summary, Map<String, String> extMap) { Log.d("OnMiPushSysNoticeOpened, title: " + title + ", content: " + summary + ", extMap: " + extMap); }}7.2 服务端 OpenAPI 2.0的推送高级接口提供了AndroidPopupActivity、AndroidPopupTitle和AndroidPopupBody三个参数,分别用于设置辅助弹窗通知打开时跳转的Activity、通知标题以及通知内容(注意:StoreOffline参数也需要设置为true);辅助弹窗仅对后台进程被清理的小米/华为设备生效,对非小米/华为设备和在线的小米/华为设备不生效;当辅助弹窗生效时,推送接口的Title、Body、AndroidActivity以及额外参数设置中的功能性设置(如声音、震动等)都不起作用;PushRequest pushRequest = new PushRequest();// 其余设置省略// ...// 0:表示消息(默认为0), 1:表示通知pushRequest.setType(1);// 标题pushRequest.setTitle(dateFormat.format(new Date()));// 内容pushRequest.setBody("PushRequest body");// 额外参数pushRequest.setAndroidExtParameters("{\"k1\":\"android\",\"k2\":\"v2\"}");// 设置辅助弹窗打开ActivitypushRequest.setAndroidPopupActivity("*****");// 设置辅助弹窗通知标题pushRequest.setAndroidPopupTitle("*****");// 设置辅助弹窗通知内容pushRequest.setAndroidPopupBody("*****"); 7.3 场景解析以下几种普通推送结合辅助弹窗推送的场景,帮助您快速理解辅助弹窗功能的配置。 客户端配置客户端有Main、Second两个Activity,MainActivity为App打开主页面,SecondActivity extends AndroidPopupActivity; 普通通知回调配置: public class MyMessageReceiver extends MessageReceiver { /** * 推送通知的回调方法 * @param context * @param title * @param summary * @param extraMap */ @Override public void onNotification(Context context, String title, String summary, Map<String, String> extraMap) { Log.d(TAG, "Receive notification, title: " + title + ", content: " + summary + ", extraMap: " + extraMap); }} MainActivity定义: package com.alibaba.push.testdemo;public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { Log.d(TAG, "Main"); }} SecondActivity定义: package com.alibaba.push.testdemo;import com.alibaba.sdk.android.push.AndroidPopupActivity;public class SecondActivity extends AndroidPopupActivity { /** * 辅助弹窗指定打开Activity回调 * @param title 标题 * @param content 内容 * @param extraMap 额外参数 */ @Override protected void onSysNoticeOpened(String title, String content, Map<String, String> extraMap) { Log.d(TAG, "Receive XiaoMi notification, title: " + title + ", content: " + content + ", extraMap: " + extraMap); }}场景1:普通推送打开App + 辅助弹窗服务端配置如下: PushRequest pushRequest = new PushRequest();// 其余设置省略// ...// 0:表示消息(默认为0), 1:表示通知pushRequest.setType(1);// 标题pushRequest.setTitle("hello");// 内容pushRequest.setBody("PushRequest body");// 点击通知后动作 "APPLICATION" : 打开应用 "ACTIVITY" : 打开AndroidActivity "URL" : 打开URL "NONE" : 无跳转pushRequest.setAndroidOpenType("APPLICATION");// 设置辅助弹窗打开ActivitypushRequest.setAndroidPopupActivity("com.alibaba.push.testdemo.SecondActivity");// 设置辅助弹窗通知标题pushRequest.setAndroidPopupTitle("hello2");// 设置辅助弹窗通知内容pushRequest.setAndroidPopupBody("PushRequest body2");// 设定android类型设备通知的扩展属性pushRequest.setAndroidExtParameters("{\"k1\":\"android\",\"k2\":\"v2\"}");推送结果: 非小米、华为设备和在线小米、华为设备 收到普通推送通道弹出的通知,点击后打开App,进入首页MainActivity,如果设备在前台,保持当前界面不变;onNotification()回调输出Receive notification, title: hello, content: PushRequest body, extraMap: {k1=android, k2=v2}; 清理进程后的小米、华为设备 辅助弹窗通道弹出通知,点击后跳转到SecondActivity;onSysNoticeOpened()回调输出Receive XiaoMi notification, title: hello2, content: PushRequest body2, extraMap: {k1=android, k2=v2}; 场景2:普通推送打开Activity + 辅助弹窗服务端配置如下: PushRequest pushRequest = new PushRequest();// 其余设置省略// ...// 0:表示消息(默认为0), 1:表示通知pushRequest.setType(1);// 标题pushRequest.setTitle("hello");// 内容pushRequest.setBody("PushRequest body");// 点击通知后动作 "APPLICATION" : 打开应用 "ACTIVITY" : 打开AndroidActivity "URL" : 打开URL "NONE" : 无跳转pushRequest.setAndroidOpenType("ACTIVITY");// 指定普通推送要打开的ActivitypushRequest.setAndroidActivity("com.alibaba.push.testdemo.SecondActivity");// 设置辅助弹窗打开ActivitypushRequest.setAndroidPopupActivity("com.alibaba.push.testdemo.SecondActivity");// 设置辅助弹窗通知标题pushRequest.setAndroidPopupTitle("hello2");// 设置辅助弹窗通知内容pushRequest.setAndroidPopupBody("PushRequest body2");// 设定android类型设备通知的扩展属性pushRequest.setAndroidExtParameters("{\"k1\":\"android\",\"k2\":\"v2\"}");推送结果: 非小米、华为设备和在线小米、华为设备 收到普通推送通道弹出的通知,点击后跳转到SecondActivity;onNotification()回调输出Receive notification, title: hello, content: PushRequest body, extraMap: {k1=android, k2=v2}; 清理进程后的小米、华为设备 辅助弹窗通道弹出通知,点击后跳转到SecondActivity;onSysNoticeOpened()回调输出Receive XiaoMi notification, title: hello2, content: PushRequest body2, extraMap: {k1=android, k2=v2};

2019-12-01 23:11:50 0 浏览量 回答数 0

回答

英文原文:Java Integer Cache 翻译地址:Java中整型的缓存机制 原文作者:Java Papers 翻译作者:Hollis 转载请注明出处。 本文将介绍Java中Integer的缓存相关知识。这是在Java 5中引入的一个有助于节省内存、提高性能的功能。首先看一个使用Integer的示例代码,从中学习其缓存行为。接着我们将为什么这么实现以及他到底是如何实现的。你能猜出下面的Java程序的输出结果吗。如果你的结果和真正结果不一样,那么你就要好好看看本文了。 package com.javapapers.java; public class JavaIntegerCache { public static void main(String... strings) { Integer integer1 = 3; Integer integer2 = 3; if (integer1 == integer2) System.out.println("integer1 == integer2"); else System.out.println("integer1 != integer2"); Integer integer3 = 300; Integer integer4 = 300; if (integer3 == integer4) System.out.println("integer3 == integer4"); else System.out.println("integer3 != integer4"); } } 我们普遍认为上面的两个判断的结果都是false。虽然比较的值是相等的,但是由于比较的是对象,而对象的引用不一样,所以会认为两个if判断都是false的。在Java中,==比较的是对象应用,而equals比较的是值。所以,在这个例子中,不同的对象有不同的引用,所以在进行比较的时候都将返回false。奇怪的是,这里两个类似的if条件判断返回不同的布尔值。 上面这段代码真正的输出结果: integer1 == integer2 integer3 != integer4 Java中Integer的缓存实现 在Java 5中,在Integer的操作上引入了一个新功能来节省内存和提高性能。整型对象通过使用相同的对象引用实现了缓存和重用。 适用于整数值区间-128 至 +127。 只适用于自动装箱。使用构造函数创建对象不适用。 Java的编译器把基本数据类型自动转换成封装类对象的过程叫做自动装箱,相当于使用valueOf方法: Integer a = 10; //this is autoboxing Integer b = Integer.valueOf(10); //under the hood 现在我们知道了这种机制在源码中哪里使用了,那么接下来我们就看看JDK中的valueOf方法。下面是JDK 1.8.0 build 25的实现: /** * Returns an {@code Integer} instance representing the specified * {@code int} value. If a new {@code Integer} instance is not * required, this method should generally be used in preference to * the constructor {@link #Integer(int)}, as this method is likely * to yield significantly better space and time performance by * caching frequently requested values. * * This method will always cache values in the range -128 to 127, * inclusive, and may cache other values outside of this range. * * @param i an {@code int} value. * @return an {@code Integer} instance representing {@code i}. * @since 1.5 */ public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } 在创建对象之前先从IntegerCache.cache中寻找。如果没找到才使用new新建对象。 IntegerCache Class IntegerCache是Integer类中定义的一个private static的内部类。接下来看看他的定义。 /** * Cache to support the object identity semantics of autoboxing for values between * -128 and 127 (inclusive) as required by JLS. * * The cache is initialized on first usage. The size of the cache * may be controlled by the {@code -XX:AutoBoxCacheMax=} option. * During VM initialization, java.lang.Integer.IntegerCache.high property * may be set and saved in the private system properties in the * sun.misc.VM class. */ private static class IntegerCache { static final int low = -128; static final int high; static final Integer cache[]; static { // high value may be configured by property int h = 127; String integerCacheHighPropValue = sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); if (integerCacheHighPropValue != null) { try { int i = parseInt(integerCacheHighPropValue); i = Math.max(i, 127); // Maximum array size is Integer.MAX_VALUE h = Math.min(i, Integer.MAX_VALUE - (-low) -1); } catch( NumberFormatException nfe) { // If the property cannot be parsed into an int, ignore it. } } high = h; cache = new Integer[(high - low) + 1]; int j = low; for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++); // range [-128, 127] must be interned (JLS7 5.1.7) assert IntegerCache.high >= 127; } private IntegerCache() {} } 其中的javadoc详细的说明了缓存支持-128到127之间的自动装箱过程。最大值127可以通过-XX:AutoBoxCacheMax=size修改。 缓存通过一个for循环实现。从低到高并创建尽可能多的整数并存储在一个整数数组中。这个缓存会在Integer类第一次被使用的时候被初始化出来。以后,就可以使用缓存中包含的实例对象,而不是创建一个新的实例(在自动装箱的情况下)。 实际上这个功能在Java 5中引入的时候,范围是固定的-128 至 +127。后来在Java 6中,可以通过java.lang.Integer.IntegerCache.high设置最大值。这使我们可以根据应用程序的实际情况灵活地调整来提高性能。到底是什么原因选择这个-128到127范围呢?因为这个范围的数字是最被广泛使用的。 在程序中,第一次使用Integer的时候也需要一定的额外时间来初始化这个缓存。 Java语言规范中的缓存行为 在Boxing Conversion部分的Java语言规范(JLS)规定如下: 如果一个变量p的值是: -128至127之间的整数(§3.10.1) true 和 false的布尔值 (§3.10.3) ‘\u0000’至 ‘\u007f’之间的字符(§3.10.4) 中时,将p包装成a和b两个对象时,可以直接使用a==b判断a和b的值是否相等。 其他缓存的对象 这种缓存行为不仅适用于Integer对象。我们针对所有的整数类型的类都有类似的缓存机制。 有ByteCache用于缓存Byte对象 有ShortCache用于缓存Short对象 有LongCache用于缓存Long对象 有CharacterCache用于缓存Character对象 Byte, Short, Long有固定范围: -128 到 127。对于Character, 范围是 0 到 127。除了Integer以外,这个范围都不能改变。

montos 2020-06-01 21:24:56 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站