差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
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 sharedClientupdatePushNotificationOptionsToServerWithCompletion:^(EMError *aError) { +   // 设置失败 
-    if(!aError){ +}else { 
-        ​NSLog(@"​更新推送设置到服务器成功"​);​ +   // 设置成功 
-    } else { +}
-        ​NSLog(@"​更新推送设置到服务器失败的原因 --- %@", aError.errorDescription);​ +
-    } +
-}];+
 </​code>​ </​code>​
 +
 +
  
 ---- ----