MGAwsSnsManagerSwift
由于目前 aws 官方文档讲解不够全面,相关的教学和经验分享也不多,
在接入简单通知服务时遇到了不小的困难,
因此这里整理了所有步骤,并将其封装成库以方便接入。
接入方式参考
使用 Amazon 的 AWS 简单通知服务 (SNS) 进行 iOS 推送
版本
1.0.0 - 将 Swift 版本更新至 4.2,将注册主题的部分提取出来,可以由外部调用是否注册主题
0.0.2 - 修改显示名称
0.0.1 - 初始项目提交
添加依赖
Cocoapods
pod 'MGAwsSnsManagerSwift', '~> {version}'
(其中 {version} 请根据需要替换版本号 )
前置准备
-
项目的推送权限/凭证,以及随后生成的p12文件,由于教程较多,不再过多赘述。
-
配置项目以实现远程推送相关设置,开启后台模式以及推送通知。
-
项目引入了AWS SDK,可以使用cocoapods直接引入,当前文件使用的SDK版本均为2.6.29。
pod 'AWSCore', '~> 2.6.31' pod 'AWSSNS', '~> 2.6.31' pod 'AWSCognito', '~> 2.6.31'
初次接入AWS Simple Notification Service
接入AWS SNS需要以下资料
- applicationArn - 应用程序ARN
- topicsArn - 订阅主题(不一定需要)
- region - 地区代码
- identityPoolId - 身份池ID
按照以下步骤可以得到上述所有信息
- 打开AWS的SNS页面,选择创建应用程序,并按照平台加入相关信息,在此步骤结束后可以得到1. applicationArn
- 如果不需要订阅话题(主题),则跳过此步骤选择创建话题,输入并创建话题名称,显示名称(主要用作用于短信,我们接入SNS可以不输入),在此步骤结束后可以得到2. topicsArn
- 进入AWS控制台页面,点击服务搜索Cognito并进入,此处为创建身份池(IdentityPool)的地方
- 选择管理身份池,选择创建新的身份池
- 输入身份池名称,并勾选启用未经验证的身份的访问权限,接着点击创建池,选择允许
- 在demo中可以看到身份池ID(IdentityPoolId),在此步骤可以得到4. identityPoolId
- identityPoolId的开头字符串(冒号之前),即地区代码(region),在此步骤可以得到3. region
- 获取了接入AWS SNS所需的所有资料,但仍需要设置身份池权限才能使用,因此请继续完成设置身份池权限
设置身份池权限
- 返回AWS控制台页面,点击服务搜索IAM并进入,此为权限管理
- 选择角色,会看到 Cognito_{刚才创建的身份池名称}IdentityPoolAuth_Role 和 Cognito_{刚才创建的身份池名称}IdentityPoolUnauth_Role
- 选择 Cognito_{刚才创建的身份池名称}IdentityPoolUnauth_Role 并进入
- 选择权限,选择附加策略,搜索并加入AmazonSNSFullAccess
- 所有准备工作完成,可以准备在项目里对接入
在项目使用MGAwsSnsManager接入AWS SNS服务
-
加入宏定义,参考 MGMacroDefinitionXcode,
在Release中加入 -DRELEASE -
AppDelegate.swift中加入如下
import MGAwsSnsManagerSwift @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { //aws sns推播服務封裝類別 private var mAwsManager: MGAwsSnsManager func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { //推播類初始化配置 do { //有兩種初始化設置的方式, 選擇一個進行初始化 //a. 無參數 - 須先在專案目錄下創建並加入名為 mgawssnsconfig.txt 的文件, 內容可參考最下方說明, 沒有或者內容不對則拋出錯誤 MGAwsSnsManager.shared.loadConfig() //b. 有參數 - 帶入需要的資料 MGAwsSnsManager.shared.loadConfig( applicationArn: "", topicsArn: [], region: "", identityPoolId: "" ) //最後開始依照配置檔進行向aws註冊app推播, 此步驟會設定 aws 身份憑證, 並且向系統註冊遠程推播 try MGAwsSnsManager.shared.settingStart() } catch { print("初始化 awsManager 設置出現錯誤 \(error)") } return true } } //當向系統註冊遠程推播成功後調用 func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { //註冊 app token 到 aws app arn 下, 同時註冊 topic //@param autoRegisterTopic - 是否在app註冊成功後自動註冊主題 mAwsManager.registerToApplication(deviceToken: deviceToken, autoRegisterTopic: false) }
mgawssnsconfig.txt 的内容格式: 配置配置
-
订阅/取消订阅/检查订阅主题
//訂閱主題 MGAwsSnsManager.shared.registerToTopic() //取消訂閱主題 MGAwsSnsManager.shared.unregisterTopic() //檢查主題是否已訂閱 MGAwsSnsManager.shared.isTopicRegistered
-
到此为止 aws 配置完成,可以执行app看看了(当然不能是模拟器,要实机)
如果没有问题,可以在 sns app arn 点击进入后看到注册的设备,topic 同理