MGAWSSNSManager
由于目前 AWS 官方文档讲解不太完整,因此接入 simple notification service 推广服务时遇到较大的困扰,这边从头到尾将接入的方式记下来,并且封装了接入的 code 方便使用。
版本
0.0.1 - 初始项目提交
添加依赖
Cocoapods
pod 'MGAWSSNSManager', '~> {version}'
(其中 {version} 请自行替换此版本号 )
接入方式参考: iOS 使用 AWS Simple Notifications Service (SNS) 进行推送
版本
0.0.1 - 首次提交项目
前置准备
-
项目的推送权限/凭证,以及之后生成的p12文件,由于教程较多,不多做赘述
-
项目引入aws sdk,可使用cocoapods直接引入,当前文件使用的sdk版本皆为2.6.29
pod 'AWSCore', '~> 2.6.29' pod 'AWSSNS', '~> 2.6.29' pod 'AWSCognito', '~> 2.6.29'
初次接入 AWS Simple Notification Service
接入aws需要以下资料
- applicationArn - app arn
- topicsArn - 订阅主题(不一定需要)
- region - 地区代码)
- identityPoolId - 身份池id
按照以下步骤可以得到上述所有资料
- 开启 aws 的 sns 页面,选择创建应用程序,并按照平台添加相关信息,在此步骤结束后可以得到 1. applicationArn
- 若不需要订阅Topic(主题),则跳过此步骤 选择创建Topic,输入并创建 主题名称,显示名称(主要用于sms,我们是接入sns可以不输入),在此步骤结束后可以得到 2. topicsArn
- 到 aws 控制台页面,点击服务搜索 cognito 并进入,此处为创建 身份池(IdentityPool)的地方
- 选择 管理身份池,选择 创建新的身份池
- 输入 身份池名称,并勾选 启用未经验证的身份的访问权限,然后点击 创建身份池,选择 允许
- 在 demo 可以看到 身份池id(IdentityPoolId),在此步骤可以得到 4. identityPoolId
- identityPoolId 的开头字符串(冒号之前),即是 region(地区代码),在此步骤可以得到 3. region
- 回到 aws 控制台页面,点击服务搜索 IAM 并进入,此为权限管理
- 选择 角色,会看到 Cognito_{刚才创建的身份池名称}IdentityPoolAuth_Role 和 Cognito_{刚才创建的身份池名称}IdentityPoolUnauth_Role
- 选择 Cognito_{刚才创建的身份池名称}IdentityPoolUnauth_Role 并进入
- 选择 权限,选择 附加策略,搜索并加入 AmazonSNSFullAccess
- 至此,所有准备工作完成,可以准备在项目里接入
使用 MGAWSSNSManager 接入 aws sns服务
-
添加宏定义,参考 MGMacroDefinitionXcode,
在 Release 加入 -DRELEASE -
在 AppDelegate 添加一个变量
private var mAwsManager: MGAWSSNSManager!
-
在app启动方法里初始化,并调用初始化配置设置相关方法
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { do { mAwsManager = try MGAWSSNSManager.init() try mAwsManager.configurationInit() } catch { print("初始化 awsManager 設置出現錯誤 \(error)") } return true }
-
MGAWSSNSManager 有两种初始化方式.
a. 無參數 - 在專案目錄下創建名為 mgawssnsconfig.txt 文件, 內容之前需求的4種資料相關配置, 此文件必須加入專案的target b. 有參數 - 帶入上面說的需要的資料 1. applicationArn, 2. topicsArn, 3. region, 4. identityPoolId.
mgawssnsconfig 格式可参考: Config配置
-
MGAWSSNSManager.configurationInit 此方法调用后 会自动注册推送(ios注册远程推送),
若是网络正常,注册成功后系统会自动调用此方法 在此方法里里面调用 MGAWSSNSManager.registerToApplication 此方法,
开始注册end point到 aws app arn 下,并在此方法里里面会自动注册topic//當 App 註冊推送通知成功後調用 func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { mAwsManager.registerToApplication(deviceToken: deviceToken) }
-
至此 aws 配置完成,若无误差,可以在 sns app arn 点进去之后看到注册到里面的终端点