差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
im:ios:apns:offline [2020/01/02 08:42] huanxinfudh [全局免打扰设置] |
im:ios:apns:offline [2021/04/19 07:17] (当前版本) huanxinfudh [必备条件] |
||
---|---|---|---|
行 53: | 行 53: | ||
您注册了推送功能,iOS 会自动回调以下方法,得到 deviceToken,您需要将 deviceToken 传给 SDK。 | 您注册了推送功能,iOS 会自动回调以下方法,得到 deviceToken,您需要将 deviceToken 传给 SDK。 | ||
- | ''如果是iOS13及以上的系统,请将SDK更新到v3.6.2及以上版本'' | + | ''如果是iOS13及以上的系统,请将SDK更新到v3.6.4及以上版本'' |
<code objc> | <code objc> | ||
// 将得到的deviceToken传给SDK | // 将得到的deviceToken传给SDK | ||
行 70: | 行 70: | ||
**注:必须是真机,模拟器不支持APNs。APNs 注册失败,一般是由于使用了通用证书或者是模拟器调试导致,请检查证书并用真机调试。此处是 iOS 系统报的错,如仍不能确定,请从网上查找相关资料。** | **注:必须是真机,模拟器不支持APNs。APNs 注册失败,一般是由于使用了通用证书或者是模拟器调试导致,请检查证书并用真机调试。此处是 iOS 系统报的错,如仍不能确定,请从网上查找相关资料。** | ||
- | ===== 获取全局 APNs 配置 ===== | + | ===== 获取 APNs 配置 ===== |
APNs 属性需要从服务器获取端获取。 | APNs 属性需要从服务器获取端获取。 | ||
登录成功后调用。 | 登录成功后调用。 | ||
- | <code objc> | + | |
+ | <code java> | ||
/*! | /*! | ||
+ | * \~chinese | ||
+ | * 从服务器获取推送属性 | ||
+ | * | ||
+ | * 同步方法,会阻塞当前线程 | ||
+ | * | ||
+ | * @param pError 错误信息 | ||
+ | * | ||
+ | * @result 推送属性 | ||
+ | */ | ||
+ | - (EMPushOptions *)getPushOptionsFromServerWithError:(EMError **)pError; | ||
+ | |||
+ | /*! | ||
+ | * \~chinese | ||
* 从服务器获取推送属性 | * 从服务器获取推送属性 | ||
* | * | ||
行 82: | 行 96: | ||
*/ | */ | ||
- (void)getPushNotificationOptionsFromServerWithCompletion:(void (^)(EMPushOptions *aOptions, EMError *aError))aCompletionBlock; | - (void)getPushNotificationOptionsFromServerWithCompletion:(void (^)(EMPushOptions *aOptions, EMError *aError))aCompletionBlock; | ||
- | |||
- | // 调用: | ||
- | [[EMClient sharedClient] getPushNotificationOptionsFromServerWithCompletion:^(EMPushOptions *aOptions, EMError *aError) { | ||
- | if(!aError){ | ||
- | NSLog(@"从服务器获取推送属性成功"); | ||
- | } else { | ||
- | NSLog(@"从服务器获取推送属性失败的原因 --- %@", aError.errorDescription); | ||
- | } | ||
- | }]; | ||
</code> | </code> | ||
- | ===== 设置 APNs 全局属性 ===== | + | 示例代码: |
+ | <code java> | ||
+ | EMError *err; | ||
+ | EMPushOptions *options = [EMClient.sharedClient.pushManager getPushOptionsFromServerWithError:&err]; | ||
+ | if (err) { | ||
+ | // 获取失败 | ||
+ | }else { | ||
+ | // 获取成功 | ||
+ | } | ||
- | 提供三种方法。可以配置 APNs 免打扰时间、APNs 昵称、推送样式。EMPushNotificationOptions 中的属性传入你想设置的值,调用以下方法即可。 | + | </code> |
- | 以下方法会将 options 参数中的所有属性都更新到服务器上,请确保传入的 options 参数中的配置符合你的要求。 | + | ===== 设置APNs显示名称 ===== |
+ | |||
+ | 当您给对方发消息,对方不在线时,推送中显示的发送方将为您设置的昵称; | ||
登录成功后调用。 | 登录成功后调用。 | ||
- | <code objc> | + | <code java> |
+ | /*! | ||
+ | * \~chinese | ||
+ | * 设置推送消息显示的昵称 | ||
+ | * | ||
+ | * 同步方法,会阻塞当前线程 | ||
+ | * | ||
+ | * @param aNickname 要设置的昵称 | ||
+ | * | ||
+ | * @result 错误信息 | ||
+ | */ | ||
+ | - (EMError *)updatePushDisplayName:(NSString *)aDisplayName; | ||
/*! | /*! | ||
- | * 更新推送设置到服务器 | + | * \~chinese |
+ | * 设置推送的显示名 | ||
* | * | ||
+ | * @param aDisplayName 推送显示名 | ||
* @param aCompletionBlock 完成的回调 | * @param aCompletionBlock 完成的回调 | ||
*/ | */ | ||
- | - (void)updatePushNotificationOptionsToServerWithCompletion:(void (^)(EMError *aError))aCompletionBlock; | + | - (void)updatePushDisplayName:(NSString *)aDisplayName |
+ | completion:(void (^)(NSString *aDisplayName, EMError *aError))aCompletionBlock; | ||
+ | </code> | ||
- | // 调用: | + | 示例代码 |
- | [[EMClient sharedClient] updatePushNotificationOptionsToServerWithCompletion:^(EMError *aError) { | + | <code java> |
- | if(!aError){ | + | EMError *err = [EMClient.sharedClient.pushManager updatePushDisplayName:@"推送昵称"]; |
- | NSLog(@"更新推送设置到服务器成功"); | + | if (err) { |
- | } else { | + | // 设置失败 |
- | NSLog(@"更新推送设置到服务器失败的原因 --- %@", aError.errorDescription); | + | }else { |
- | } | + | // 设置成功 |
- | }]; | + | } |
</code> | </code> | ||
- | ===== 单独设置 APNs 昵称 ===== | + | ===== 设置 APNs 显示风格 ===== |
- | 设置当前登录用户的 APNs 昵称。 | + | 当您不在线时,如果有人给您发消息会收到推送,您可以设置显示详情(xxx: 消息内容),或者只显示有新消息(您有一条新消息); |
- | 登录成功后设置。 | + | <code java> |
+ | /*! | ||
+ | * \~chinese | ||
+ | * 推送消息的显示风格 | ||
+ | */ | ||
+ | typedef enum { | ||
+ | EMPushDisplayStyleSimpleBanner = 0, /*! | ||
+ | * 简单显示"您有一条新消息" | ||
+ | */ | ||
- | <code objc> | + | EMPushDisplayStyleMessageSummary, /*! |
- | [[EMClient sharedClient] setApnsNickname:@"推送昵称"]; | + | * 显示消息内容 |
- | </code> | + | */ |
+ | } EMPushDisplayStyle; | ||
- | ===== 设置推送显示详情 ===== | ||
- | 登录成功后设置。 | ||
- | <code objc> | ||
- | EMPushOptions *options = [[EMClient sharedClient] pushOptions]; | ||
- | options.displayStyle = EMPushDisplayStyleMessageSummary // 显示消息内容 | ||
- | // options.displayStyle = EMPushDisplayStyleSimpleBanner // 显示“您有一条新消息” | ||
- | [[EMClient sharedClient] updatePushNotificationOptionsToServerWithCompletion:^(EMError *aError) { | ||
- | if(!aError){ | ||
- | NSLog(@"更新推送设置到服务器成功"); | ||
- | } else { | ||
- | NSLog(@"更新推送设置到服务器失败的原因 --- %@", aError.errorDescription); | ||
- | } | ||
- | }]; | ||
</code> | </code> | ||
- | + | <code java> | |
- | ===== 设置指定群组是否接收 APNs ===== | + | |
- | 需登录成功。 | + | |
- | <code objc> | + | |
/*! | /*! | ||
- | * 屏蔽/取消屏蔽群组消息的推送 | + | * \~chinese |
+ | * 设置推送消息显示的样式 | ||
+ | * | ||
+ | * 同步方法,会阻塞当前线程 | ||
+ | * | ||
+ | * @param pushDisplayStyle 要设置的推送样式 | ||
* | * | ||
- | * @param aGroupId 群组ID | + | * @result 错误信息 |
- | * @param aIsEnable 是否允许推送 | + | |
- | * @param aCompletionBlock 完成的回调 | + | |
*/ | */ | ||
- | - (void)updatePushServiceForGroup:(NSString *)aGroupId | + | - (EMError *)updatePushDisplayStyle:(EMPushDisplayStyle)pushDisplayStyle; |
- | isPushEnabled:(BOOL)aIsEnable | + | |
- | completion:(void (^)(EMGroup *aGroup, EMError *aError))aCompletionBlock; | + | |
- | // 调用: | ||
- | [[EMClient sharedClient].groupManager updatePushServiceForGroup:@"groupId" isPushEnabled:NO completion:^(EMGroup *aGroup, EMError *aError) { | ||
- | if (!aError) { | ||
- | NSLog(@"屏蔽群组消息的推送成功"); | ||
- | } else { | ||
- | NSLog(@"屏蔽群组消息的推送失败的原因 --- %@", aError.errorDescription); | ||
- | } | ||
- | }]; | ||
- | </code> | ||
- | 批量指定群组是否接收 APNs | ||
- | |||
- | <code objc> | ||
/*! | /*! | ||
- | * 屏蔽/取消屏蔽群组消息的推送 | + | * \~chinese |
+ | * 设置推送的显示名 | ||
* | * | ||
- | * @param aGroupIDs 群组ID列表 | + | * @param pushDisplayStyle 推送显示样式 |
- | * @param aIsEnable 是否允许推送 | + | * @param aCompletionBlock 完成的回调 |
- | * @param aCompletionBlock 完成的回调 | + | |
*/ | */ | ||
- | - (void)updatePushServiceForGroups:(NSArray *)aGroupIDs | + | - (void)updatePushDisplayStyle:(EMPushDisplayStyle)pushDisplayStyle |
- | isPushEnabled:(BOOL)aIsEnable | + | completion:(void (^)(EMError *))aCompletionBlock; |
- | completion:(void (^)(NSArray *groups, EMError *aError))aCompletionBlock; | + | |
- | + | ||
- | // 调用: | + | |
- | [[EMClient sharedClient].groupManager updatePushServiceForGroups:@[@"groupId1"] isPushEnabled:YES completion:^(NSArray *groups, EMError *aError) { | + | |
- | if (!aError) { | + | |
- | NSLog(@"取消屏蔽群组消息的推送成功"); | + | |
- | } else { | + | |
- | NSLog(@"取消屏蔽群组消息的推送失败的原因 --- %@", aError.errorDescription); | + | |
- | } | + | |
- | }]; | + | |
</code> | </code> | ||
- | ===== 获取不接收 APNs 的群组 ID ===== | + | 示例代码 |
+ | <code java> | ||
+ | // 设置为“您有一条新消息” | ||
+ | EMError *err = [EMClient.sharedClient.pushManager updatePushDisplayStyle:EMPushDisplayStyleSimpleBanner]; | ||
+ | if (err) { | ||
+ | // 设置失败 | ||
+ | }else { | ||
+ | // 设置成功 | ||
+ | } | ||
+ | </code> | ||
- | 在获取屏蔽了推送的群组ID列表之前,要先从环信服务器获取推送配置属性,SDK会将屏蔽了推送的群组ID列表加载到内存后,才能拿到"屏蔽了推送的群组ID列表" | + | |
- | <code objc> | + | ===== 设置免打扰时段 ===== |
+ | |||
+ | 当您不想,或者某些时间段不想接收离线推送的时候,您可以设置免打扰时间段,设置后,在您指定的时间段内,环信不会给您发离线推送。 | ||
+ | 该设置优先级最高,当设置后,群组,单聊的推送在指定时间段内都无法收到。 | ||
+ | |||
+ | 开启离线推送 | ||
+ | <code java> | ||
/*! | /*! | ||
- | * 从服务器获取推送属性 | + | * \~chinese |
+ | * 开启离线推送 | ||
+ | * | ||
+ | * 同步方法,会阻塞当前线程 | ||
+ | * | ||
+ | * @result 错误信息 | ||
* | * | ||
- | * @param aCompletionBlock 完成的回调 | ||
*/ | */ | ||
- | - (void)getPushNotificationOptionsFromServerWithCompletion:(void (^)(EMPushOptions *aOptions, EMError *aError))aCompletionBlock; | + | - (EMError *)enableOfflinePush; |
+ | </code> | ||
- | // 调用: | + | 示例代码 |
- | [[EMClient sharedClient] getPushNotificationOptionsFromServerWithCompletion:^(EMPushOptions *aOptions, EMError *aError) { | + | |
- | if (!aError) { | + | |
- | NSLog(@"从服务器获取推送属性成功"); | + | |
- | } else { | + | |
- | NSLog(@"从服务器获取推送属性失败的原因 --- %@", aError.errorDescription); | + | |
- | } | + | |
- | }]; | + | |
+ | <code java> | ||
+ | EMError *err = [EMClient.sharedClient.pushManager enableOfflinePush]; | ||
+ | if (err) { | ||
+ | // 设置失败 | ||
+ | }else { | ||
+ | // 设置成功 | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | 指定时间不接收离线推送 | ||
+ | <code java> | ||
/*! | /*! | ||
- | * 从内存中获取屏蔽了推送的群组ID列表 | + | * \~chinese |
+ | * 关闭离线推送 | ||
* | * | ||
- | * @param pError 错误信息 | + | * 同步方法,会阻塞当前线程 |
- | * @param pError Error | + | * |
+ | * @param aStartHour 开始时间 | ||
+ | * @param aEndHour 结束时间 | ||
+ | * | ||
+ | * @result 错误信息 | ||
*/ | */ | ||
- | - (NSArray *)getGroupsWithoutPushNotification:(EMError **)pError; | + | - (EMError *)disableOfflinePushStart:(int)aStartHour end:(int)aEndHour; |
- | // 调用: | ||
- | EMError *error; | ||
- | NSArray *groupIds = [[EMClient sharedClient].groupManager getGroupsWithoutPushNotification:&error]; | ||
- | if (!error) { | ||
- | NSLog(@"获取屏蔽了推送的群组ID列表成功 --- %@", groupIds); | ||
- | } else { | ||
- | NSLog(@"获取屏蔽了推送的群组ID列表失败的原因 --- %@", aError.errorDescription); | ||
- | } | ||
</code> | </code> | ||
- | ===== 全局免打扰设置 ===== | + | 示例代码 |
- | 登录成功后设置。 | + | <code java> |
+ | // 如果您想全天不接收推送,start:0, end:24; | ||
+ | // 如果您想早7点到下午5天不接收推送,start:7, end:17; | ||
+ | // 如果您想晚10点到早晨8点不接收推送,start:22, end:8; | ||
+ | EMError *err = [EMClient.sharedClient.pushManager disableOfflinePushStart:0 end:24]; | ||
+ | if (err) { | ||
+ | // 设置失败 | ||
+ | }else { | ||
+ | // 设置成功 | ||
+ | } | ||
+ | </code> | ||
- | <code objc> | + | ===== 设置群组免打扰 ===== |
+ | |||
+ | 当您不想收到某个群的离线推送时,您可以设置群组免打扰 | ||
+ | |||
+ | <code java> | ||
/*! | /*! | ||
- | @enum | + | * \~chinese |
- | @brief 推送免打扰设置的状态 | + | * 设置群组是否接收推送 |
- | @constant EMPushNoDisturbStatusDay 全天免打扰 | + | * |
- | @constant EMPushNoDisturbStatusCustom 自定义时间段免打扰 | + | * 同步方法,会阻塞当前线程 |
- | @constant EMPushNoDisturbStatusClose 关闭免打扰模式 | + | * |
+ | * @param aGroupIds 群组id | ||
+ | * @param disable 是否接收推送 | ||
+ | * | ||
+ | * @result 错误信息 | ||
*/ | */ | ||
- | typedef NS_ENUM(NSInteger, EMPushNoDisturbStatus) { | + | - (EMError *)updatePushServiceForGroups:(NSArray *)aGroupIds |
- | EMPushNoDisturbStatusDay = 0, | + | disablePush:(BOOL)disable; |
- | EMPushNoDisturbStatusCustom, | + | |
- | EMPushNoDisturbStatusClose, | + | |
- | }; | + | |
- | // 设置全天免打扰,设置后,您将收不到任何推送 | ||
- | EMPushOptions *options = [[EMClient sharedClient] pushOptions]; | ||
- | options.noDisturbStatus = EMPushNoDisturbStatusDay; | ||
- | options.noDisturbingStartH = 0; | ||
- | options.noDisturbingEndH = 24; | ||
- | [[EMClient sharedClient] updatePushNotificationOptionsToServerWithCompletion:^(EMError *aError) { | ||
- | if(!aError){ | ||
- | NSLog(@"更新推送设置到服务器成功"); | ||
- | } else { | ||
- | NSLog(@"更新推送设置到服务器失败的原因 --- %@", aError.errorDescription); | ||
- | } | ||
- | }]; | ||
+ | /*! | ||
+ | * \~chinese | ||
+ | * 设置群组是否接收推送 | ||
+ | * | ||
+ | * @param aGroupIds 群组id | ||
+ | * @param disable 是否接收推送 | ||
+ | * @param aCompletionBlock 完成的回调 | ||
+ | */ | ||
+ | - (void)updatePushServiceForGroups:(NSArray *)aGroupIds | ||
+ | disablePush:(BOOL)disable | ||
+ | completion:(void (^)(EMError *))aCompletionBlock; | ||
+ | </code> | ||
- | // 设置免打扰时段,设置后,在改时间内不收推送 | + | 示例代码 |
- | EMPushOptions *options = [[EMClient sharedClient] pushOptions]; | + | <code java> |
- | options.noDisturbStatus = EMPushNoDisturbStatusCustom; | + | // 不接受群id是82000139的群组推送。 |
- | options.noDisturbingStartH = 9; | + | EMError *err = [EMClient.sharedClient.pushManager updatePushServiceForGroups:@[@"82000139"] disablePush:YES]; |
- | options.noDisturbingEndH = 22; | + | if (err) { |
- | [[EMClient sharedClient] updatePushNotificationOptionsToServerWithCompletion:^(EMError *aError) { | + | // 设置失败 |
- | if(!aError){ | + | }else { |
- | NSLog(@"更新推送设置到服务器成功"); | + | // 设置成功 |
- | } else { | + | } |
- | NSLog(@"更新推送设置到服务器失败的原因 --- %@", aError.errorDescription); | + | |
- | } | + | |
- | }]; | + | |
</code> | </code> | ||
+ | |||
+ | |||
---- | ---- |