【集成攻略】手把手教你环信对接离线推送,再搞不定把你头打掉
前提条件
1.macOS系统,安装了xcode,并且配置好了cocoapods第三方管理工具
2.有苹果开发者账号
3.有环信开发者账号
(注册地址:https://console.easemob.com/user/register)
在苹果开发者中心创建项目,注册推送证书.
1.登录苹果开发者中心.
(请用自己的苹果开发者账号)
2.苹果开发者中心创建 - Identifiers.
(name - empushdemo )
(identifier - com.yyytp.empushdemo )
3.钥匙串 - 从证书颁发机构请求证书
(本机证书)
4.针对刚创建的bundle id开通并注册Certificates push 证书
(注册 可以在开发和生产双环境下使用的推送证书)
5.安装证书到本机,并导出 push - p12
(这里需要格外注意操作步骤!不能展开!!!要闭合的状态导出!!!)
(因为申领的证书是双环境的,所以导出的p12文件直接复制成双份即可)
(开发证书名称 : yyytp_empush_apns_dev)
(生产证书名称 : yyytp_empush_apns_pro)
(密码 : 不告诉你)
==========
提示:解决证书不受信任的问题
如果在《钥匙串访问》中出现"证书不受信任"的警告时,可以去苹果官方网站下载G4证书,并双击打开即可
“证书不受信任”的图片样例
苹果官方网站链接:
https://www.apple.com/certificateauthority/
苹果官方网站需要下载的G4证书截图说明:
苹果官方解释:
苹果全球开发者关系中级证书的版本将于2023年2月7日到期,续订版本将于2030年2月20日到期。更新后的版本用于签署2021 1月28日之后颁发的新软件签名证书。剩余服务证书将于2022年1月27日更新。
为苹果平台开发的苹果开发者计划和苹果开发者企业计划的成员需要下载更新的证书,并遵循以下说明。
苹果开发者企业计划的成员需要在所有使用2020年9月1日之后生成的企业iOS分发证书进行代码签名的机器上安装续订的证书。
对于2021 1月28日之后生成的所有软件签名证书,由在Xcode中拥有个人帐户的开发人员和iOS大学开发人员计划成员提供的,也需要进行此更新。
新的中间证书由Xcode 11.4.1或更高版本自动下载,可在证书颁发机构页面上下载。通过验证过期日期设置为2030,确认安装了正确的中间证书。
注:本解决方案来自简书平台的博主AndyLiYL
原文链接:
https://www.jianshu.com/p/2697ed4f6e41
==========
后续补充:导出时必须使用[英文+数字+下划线]字符集内字符.不能使用中文和其他特殊符号
以上是在苹果开发者中心做了两件事
1.创建了bundleid为com.yyytp.empushdemo的app
2.创建推送证书 apns-2.cer 并导出了 (.p12) 证书,复制为2份,分别命名为 yyytp_empush_apns_dev 和 yyytp_empush_apns_pro 密码是 123456
其中两份p12证书内容是完全一样的,只是命名不同,都适用于开发和生产环境,不过为了后期导入环信后台时方便辨识
===========分割线===========================
在环信console后台创建一个appkey,顺带创建一个测试username
1.登录环信console后台:https://console.easemob.com/user/login
2.创建appkey
(app_name : showpushdemo )
3.创建一个测试账号
(测试账号 : emtest 密码 1 )
========分割线=======================
在环信console后台中上传推送证书(.p12文件)
注意!!!是在刚才创建的appkey(1168171101115760#showpushdemo)下创建证书!!!
(这里需要注意的细节是:证书名不能有中文和其他特殊符号!!! 建议 字母 + 下划线)
(所以我会采用 yyytp_empush_apns_dev / yyytp_empush_apns_pro 这样的命名方式)
最终效果
=========分割线=======================
在代码中实现
1.创建项目
em_push_showdemo
2.集成环信SDK
pod 'HyphenateChat' , '3.9.0'
3.配置项目
4.代码部分如下:
下面代码是AppDelegate.m的所有代码,可直接复制粘贴
下面代码是AppDelegate.m的所有代码,可直接复制粘贴
下面代码是AppDelegate.m的所有代码,可直接复制粘贴
//
// AppDelegate.m
// em_push_showdemo
//
// Created by flower on 2022/3/14.
//
#import "AppDelegate.h"
#import
#import
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
/*
1.注册环信SDK
2.注册推送
注册成功之后 绑定至环信SDK
3.登录账号
*/
[self _registerEMCHAT];
[self _registerSysPush];
[self _loginEMCHAT];
return YES;
}
- (void)_registerEMCHAT{
EMOptions *options = [EMOptions optionsWithAppkey:@"1168171101115760#showpushdemo"];
options.apnsCertName = @"yyytp_empush_apns_dev";
options.isAutoLogin = false;
options.usingHttpsOnly = true;
[EMClient.sharedClient initializeSDKWithOptions:options];
}
- (void)_registerSysPush{
[UNUserNotificationCenter.currentNotificationCenter
requestAuthorizationWithOptions:
UNAuthorizationOptionBadge|
UNAuthorizationOptionSound|
UNAuthorizationOptionAlert
completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
dispatch_async(dispatch_get_main_queue(), ^{
[UIApplication.sharedApplication registerForRemoteNotifications];
});
}
}];
}
- (void)_loginEMCHAT{
[EMClient.sharedClient loginWithUsername:@"emtest" password:@"1" completion:^(NSString *aUsername, EMError *aError) {
if (aError) {
NSLog(@"登录失败");
}else{
NSLog(@"登录成功");
//下面这个updatePushDisplayStyle是设置显示效果,有两种显示效果可以设置.详情可查看枚举值(EMPushDisplayStyleSimpleBanner)的定义
[EMClient.sharedClient.pushManager updatePushDisplayStyle:EMPushDisplayStyleSimpleBanner completion:^(EMError * _Nonnull aError) {
}];
}
}];
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
NSLog(@"绑定成功");
dispatch_async(dispatch_get_main_queue(), ^{
[EMClient.sharedClient bindDeviceToken:deviceToken];
});
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
}
@end
4.运行至手机,运行完成后,退出APP,发送消息测试推送.