手把手教你环信对接离线推送,再搞不定把你头打掉

前提条件

1.macOS系统,安装了xcode,并且配置好了cocoapods第三方管理工具

2.有苹果开发者账号

3.有环信开发者账号

(注册地址:环信即时通讯云

在苹果开发者中心创建项目,注册推送证书.

1.登录苹果开发者中心.

Apple Developer

(请用自己的苹果开发者账号)

手把手教你环信对接离线推送,再搞不定把你头打掉_第1张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第2张图片

编辑

2.苹果开发者中心创建 - Identifiers.

(name - empushdemo )

(identifier - com.yyytp.empushdemo )

手把手教你环信对接离线推送,再搞不定把你头打掉_第3张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第4张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第5张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第6张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第7张图片

编辑

3.钥匙串 - 从证书颁发机构请求证书

(本机证书)

手把手教你环信对接离线推送,再搞不定把你头打掉_第8张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第9张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第10张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第11张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第12张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第13张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第14张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第15张图片

编辑

4.针对刚创建的bundle id开通并注册Certificates push 证书

(注册 可以在开发和生产双环境下使用的推送证书)

手把手教你环信对接离线推送,再搞不定把你头打掉_第16张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第17张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第18张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第19张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第20张图片

编辑

5.安装证书到本机,并导出 push - p12 

(这里需要格外注意操作步骤!不能展开!!!要闭合的状态导出!!!)

(因为申领的证书是双环境的,所以导出的p12文件直接复制成双份即可)

(开发证书名称 : yyytp_empush_apns_dev)

(生产证书名称 : yyytp_empush_apns_pro)

(密码 : 不告诉你)

手把手教你环信对接离线推送,再搞不定把你头打掉_第21张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第22张图片

编辑

==========
提示:解决证书不受信任的问题

如果在《钥匙串访问》中出现"证书不受信任"的警告时,可以去苹果官方网站下载G4证书,并双击打开即可

“证书不受信任”的图片样例

编辑

苹果官方网站链接:

Apple PKI - Apple

苹果官方网站需要下载的G4证书截图说明:

手把手教你环信对接离线推送,再搞不定把你头打掉_第23张图片

编辑

苹果官方解释:
苹果全球开发者关系中级证书的版本将于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
原文链接:
iOS 推送证书 Apple Push Services:不受信任的解决办法 - 简书

==========

后续补充:导出时必须使用[英文+数字+下划线]字符集内字符.不能使用中文和其他特殊符号

手把手教你环信对接离线推送,再搞不定把你头打掉_第24张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第25张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第26张图片

编辑

以上是在苹果开发者中心做了两件事

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

手把手教你环信对接离线推送,再搞不定把你头打掉_第27张图片

编辑

2.创建appkey

(app_name : showpushdemo )

手把手教你环信对接离线推送,再搞不定把你头打掉_第28张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第29张图片

编辑

3.创建一个测试账号

(测试账号 : emtest 密码 1 )

手把手教你环信对接离线推送,再搞不定把你头打掉_第30张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第31张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第32张图片

编辑

========分割线=======================

在环信console后台中上传推送证书(.p12文件)

注意!!!是在刚才创建的appkey( 1168171101115760#showpushdemo )下创建证书!!!

(这里需要注意的细节是:证书名不能有中文和其他特殊符号!!! 建议 字母 + 下划线)

(所以我会采用 yyytp_empush_apns_dev / yyytp_empush_apns_pro 这样的命名方式)

手把手教你环信对接离线推送,再搞不定把你头打掉_第33张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第34张图片

编辑

最终效果

手把手教你环信对接离线推送,再搞不定把你头打掉_第35张图片

编辑

=========分割线=======================

在代码中实现

1.创建项目

em_push_showdemo

2.集成环信SDK

pod 'HyphenateChat' , '3.9.0'

手把手教你环信对接离线推送,再搞不定把你头打掉_第36张图片

编辑

3.配置项目

手把手教你环信对接离线推送,再搞不定把你头打掉_第37张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第38张图片

编辑

4.代码部分如下:

手把手教你环信对接离线推送,再搞不定把你头打掉_第39张图片

编辑

手把手教你环信对接离线推送,再搞不定把你头打掉_第40张图片

编辑

下面代码是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,发送消息测试推送.

相关文档:

你可能感兴趣的:(前端)