環信3.0ios客戶端的集成(十一)

版本記錄

版本號 時間
V1.0 2017.06.10

前言

很多app種都集成環信做第三方信息通訊工具,這里我們就看一下環信的主要功能和集成方法。先給出環信3.0的地址。
感興趣的可以參考:
1. 環信ios客戶端的集成(一)
2. 環信ios客戶端的集成(二)
3. 環信ios客戶端的集成(三)
4. 環信ios客戶端的集成(四)
5. 環信ios客戶端的集成(五)
6. 環信ios客戶端的集成(六)
7. 環信ios客戶端的集成(七)
8. 環信ios客戶端的集成(八)
9. 環信ios客戶端的集成(九)
10. 環信ios客戶端的集成(十)
這一篇主要說一下環信的 APNS 離線推送

一、必備條件

1. 后臺上傳了推送證書

具體步驟見集成 iOS SDK 前的準備工作-制作并上傳推送證書

2. 代碼配置 APNS 使用的推送證書。

EMOptions *options = [EMOptions optionsWithAppkey:@"appkey"];
options.apnsCertName = @"apnsCertName";
[[EMClient sharedClient] initializeSDKWithOptions:options];

3. 代碼注冊離線推送。

//iOS8以上 注冊APNS
if ([application respondsToSelector:@selector(registerForRemoteNotifications)]) {
    [application registerForRemoteNotifications];
    UIUserNotificationType notificationTypes = UIUserNotificationTypeBadge |
    UIUserNotificationTypeSound |
    UIUserNotificationTypeAlert;
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:notificationTypes categories:nil];
    [application registerUserNotificationSettings:settings];
    }
else{
    UIRemoteNotificationType notificationTypes = UIRemoteNotificationTypeBadge |
    UIRemoteNotificationTypeSound |
    UIRemoteNotificationTypeAlert;
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:notificationTypes];
}

您注冊了推送功能,iOS 會自動回調以下方法,得到 deviceToken,您需要將 deviceToken 傳給 SDK。

// 將得到的deviceToken傳給SDK
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    [[EMClient sharedClient] bindDeviceToken:deviceToken];
}

// 注冊deviceToken失敗
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
    NSLog(@"error -- %@",error);
}

??APNS 注冊失敗,一般是由于使用了通用證書或者是模擬器調試導致,請檢查證書并用真機調試。此處是 iOS 系統報的錯,如仍不能確定,請從網上查找相關資料。


二、獲取全局 APNS 配置

APNS 屬性需要從服務器獲取端獲取。

EMError *error = nil;
EMPushOptions *options = [[EMClient sharedClient] getPushOptionsFromServerWithError:&error];


三、設置 APNS 全局屬性

??提供三種方法。可以配置 APNS 免打擾時間、APNS 昵稱、推送樣式。EMPushNotificationOptions 中的屬性傳入你想設置的值,調用以下方法即可。

以下方法會將 options 參數中的所有屬性都更新到服務器上,請確保傳入的 options 參數中的配置符合你的要求。

/*!
 @property
 @brief 更新服務器推送屬性配置
 @discussion
    同步方法,會阻塞當前線程
 */
- (EMError *)updatePushOptionsToServer;

//調用:[[EMClient sharedClient] updatePushOptionsToServer];  

四、單獨設置 APNS 昵稱

登錄成功之后,按照以下代碼設置當前登錄用戶的 APNS 昵稱。

[[EMClient sharedClient] setApnsNickname:@"推送昵稱"];


五、設置推送顯示詳情

EMPushOptions *options = [[EMClient sharedClient] pushOptions];
options.displayStyle == EMPushDisplayStyleMessageSummary // 顯示消息內容
// options.displayStyle == EMPushDisplayStyleSimpleBanner // 顯示“您有一條新消息”
EMError *error = [[EMClient sharedClient] updatePushOptionsToServer]; // 更新配置到服務器,該方法為同步方法,如果需要,請放到單獨線程
if(!error) {
   // 成功
}else {
   // 失敗
}


六、設置指定群組是否接收 APNS

/*!
 @method
 @brief 屏蔽/取消屏蔽群組推送
 @param aGroupId    群組ID
 @param aIgnore     是否屏蔽
 @result 錯誤信息
 @discussion
    同步方法,會阻塞當前線程
 */
- (EMError *)ignoreGroupPush:(NSString *)aGroupId
                      ignore:(BOOL)aIgnore; 

//調用:
//[[EMClient sharedClient].groupManager ignoreGroupPush:@"groupId" ignore:YES];

批量指定群組是否接收 APNS


/*!
 *  屏蔽/取消屏蔽群組消息的推送
 *
 *  同步方法,會阻塞當前線程
 *
 *  @param aGroupIDs   群組ID列表
 *  @param aIgnore     是否屏蔽
 *
 *  @result 錯誤信息
 */
- (EMError *)ignoreGroupsPush:(NSArray *)aGroupIDs
                       ignore:(BOOL)aIsIgnore;
                       
//調用:
//[[EMClient sharedClient].groupManager ignoreGroupsPush:@[@"group1",@"group2"] ignore:YES];


七、獲取不接收 APNS 的群組 ID

登錄成功之后,APNS 會自動返回不接收 APNS 的群組 ID,獲取代碼如下。

NSArray *ignoredGroupIds = [[EMClient sharedClient].groupManager getAllIgnoredGroupIds];

八、全局免打擾設置

登錄成功后設置。


/*!
 @enum
 @brief 推送免打擾設置的狀態
 @constant EMPushNoDisturbStatusDay     全天免打擾
 @constant EMPushNoDisturbStatusCustom  自定義時間段免打擾
 @constant EMPushNoDisturbStatusClose   關閉免打擾模式
 */
typedef NS_ENUM(NSInteger, EMPushNoDisturbStatus) {
    EMPushNoDisturbStatusDay = 0,
    EMPushNoDisturbStatusCustom,
    EMPushNoDisturbStatusClose,
};

// 設置全天免打擾,設置后,您將收不到任何推送
EMPushOptions *options = [[EMClient sharedClient] pushOptions];
options.noDisturbStatus = EMPushNoDisturbStatusDay;
options.noDisturbingStartH = 0;
options.noDisturbingEndH = 24;
EMError *error = [[EMClient sharedClient] updatePushOptionsToServer];


// 設置免打擾時段,設置后,在改時間內不收推送
EMPushOptions *options = [[EMClient sharedClient] pushOptions];
options.noDisturbStatus = EMPushNoDisturbStatusCustom;
options.noDisturbingStartH = 9;
options.noDisturbingEndH = 22;
EMError *error = [[EMClient sharedClient] updatePushOptionsToServer];

后記

未完,待續~~~

湖面如鏡
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 版本記錄 前言 很多app種都集成環信做第三方信息通訊工具,這里我們就看一下環信的主要功能和集成方法。先給出環信3...
    刀客傳奇閱讀 671評論 0 1
  • 版本記錄 前言 很多app種都集成環信做第三方信息通訊工具,這里我們就看一下環信的主要功能和集成方法。先給出環信3...
    刀客傳奇閱讀 888評論 0 0
  • 1)項目里面不需要環信SDK的太多功能,只是想要聊天和好友功能,其他都不用,那SDK一定要總是跟著更新么? a.環...
    DefaultYuan閱讀 26,645評論 17 59
  • 最近一段時間工作量比較大, 抽不出時間來整理博客, 趁今天任務量較小的時候整理下關于環信推送的問題, 介紹. 集成...
    imGeek閱讀 2,764評論 1 3
  • 版本記錄 前言 很多app種都集成環信做第三方信息通訊工具,這里我們就看一下環信的主要功能和集成方法。先給出環信3...
    刀客傳奇閱讀 755評論 0 1