MGAWSSNSManagerSwift 1.0.0

MGAWSSNSManagerSwift 1.0.0

Water 维护。



 
依赖项
AWSCore~> 2.6.31
AWSSNS~> 2.6.31
AWSCognito~> 2.6.31
 

  • MagicalWater

MGAwsSnsManagerSwift

由于目前 aws 官方文档讲解不够全面,相关的教学和经验分享也不多,
在接入简单通知服务时遇到了不小的困难,
因此这里整理了所有步骤,并将其封装成库以方便接入。

接入方式参考
使用 Amazon 的 AWS 简单通知服务 (SNS) 进行 iOS 推送

版本

1.0.0 - 将 Swift 版本更新至 4.2,将注册主题的部分提取出来,可以由外部调用是否注册主题
0.0.2 - 修改显示名称
0.0.1 - 初始项目提交

添加依赖

Cocoapods

pod 'MGAwsSnsManagerSwift', '~> {version}'
(其中 {version} 请根据需要替换版本号

前置准备

  1. 项目的推送权限/凭证,以及随后生成的p12文件,由于教程较多,不再过多赘述。

  2. 配置项目以实现远程推送相关设置,开启后台模式以及推送通知。

  3. 项目引入了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需要以下资料

  1. applicationArn - 应用程序ARN
  2. topicsArn - 订阅主题(不一定需要)
  3. region - 地区代码
  4. identityPoolId - 身份池ID

按照以下步骤可以得到上述所有信息

  1. 打开AWS的SNS页面,选择创建应用程序,并按照平台加入相关信息,在此步骤结束后可以得到1. applicationArn
  2. 如果不需要订阅话题(主题),则跳过此步骤选择创建话题,输入并创建话题名称,显示名称(主要用作用于短信,我们接入SNS可以不输入),在此步骤结束后可以得到2. topicsArn
  3. 进入AWS控制台页面,点击服务搜索Cognito并进入,此处为创建身份池(IdentityPool)的地方
  4. 选择管理身份池,选择创建新的身份池
  5. 输入身份池名称,并勾选启用未经验证的身份的访问权限,接着点击创建池,选择允许
  6. 在demo中可以看到身份池ID(IdentityPoolId),在此步骤可以得到4. identityPoolId
  7. identityPoolId的开头字符串(冒号之前),即地区代码(region),在此步骤可以得到3. region
  8. 获取了接入AWS SNS所需的所有资料,但仍需要设置身份池权限才能使用,因此请继续完成设置身份池权限

设置身份池权限

  1. 返回AWS控制台页面,点击服务搜索IAM并进入,此为权限管理
  2. 选择角色,会看到 Cognito_{刚才创建的身份池名称}IdentityPoolAuth_RoleCognito_{刚才创建的身份池名称}IdentityPoolUnauth_Role
  3. 选择 Cognito_{刚才创建的身份池名称}IdentityPoolUnauth_Role 并进入
  4. 选择权限,选择附加策略,搜索并加入AmazonSNSFullAccess
  5. 所有准备工作完成,可以准备在项目里对接入

在项目使用MGAwsSnsManager接入AWS SNS服务

  1. 加入宏定义,参考 MGMacroDefinitionXcode,
    在Release中加入 -DRELEASE

  2. 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 的内容格式: 配置配置

  1. 订阅/取消订阅/检查订阅主题

    //訂閱主題
    MGAwsSnsManager.shared.registerToTopic()
    
    //取消訂閱主題
    MGAwsSnsManager.shared.unregisterTopic()
    
    //檢查主題是否已訂閱
    MGAwsSnsManager.shared.isTopicRegistered
    
  2. 到此为止 aws 配置完成,可以执行app看看了(当然不能是模拟器,要实机)
    如果没有问题,可以在 sns app arn 点击进入后看到注册的设备,topic 同理