iOS Push与Amazon的AWS简单通知服务(SNS)和Swift轻松实现

推送是任何移动应用程序中不可思议且必不可少的功能。 亚马逊的AWS通过其惊人的简单通知服务(SNS)为移动提供了推送服务。 我个人发现使用Swift和SNS在iOS上实现推送有点困难,主要是因为没有关于该主题的简化的分步文档。 本教程就是这样:一个简单的分步教程,介绍如何使用Swift和SNS在iOS上实现推送通知。 我们将您要在下面学习的内容纳入了此处列出的大多数产品中。 本教程旨在握住您的每一个步骤我们将创建一个Swift / SNS push应用程序。

  1. 首先创建一个单页应用程序:打开XCode并创建一个单页应用程序。 您可以随意调用该应用程序,但要确保名称是唯一的。
  2. 创建p12证书:为新应用创建应用ID,推送启用的证书和p12文件。 这是一个很好的教程,请执行以下操作:单击此处。
  3. a)创建一个新的平台应用程序:登录到AWS并转到SNS仪表板。 单击“创建平台应用程序”链接。

b)输入平台应用程序详细信息:输入您的应用程序名称(您的唯一名称)。 推送通知平台应为“ Apple开发”。

4. 完成创建平台应用程序:在下拉菜单中选择“ iOS推送证书”作为推送证书类型。 单击“选择文件”按钮,然后选择您在步骤2中创建的p12证书文件。单击“从文件加载凭据”按钮,如果您为证书创建了一个,则输入密码。 如果没有密码,请将其保留为空白。 完成所有操作后,单击“创建平台应用程序”按钮。

复制应用程序ARN以在XCode应用程序中进一步使用

5. 将SNS ARN插入您的应用程序委托:打开AppDelegate.swift文件,并将SNS平台应用程序ARN插入为应用程序委托的第一个变量。 自然,您的应用程序ARN将与下面的字符串不同。

  /// SNS平台应用程序ARN 
 让SNSPlatformApplicationArn =“ arn:aws:sns:us-east-1:203525439813:app / APNS_SANDBOX / SpreebieSNSExample” 

6. 下载适用于iOS的AWS开发工具包:转到此处的适用于iOS的AWS开发工具包页面,然后下载SDK或单击此处下载。

7. a)解压缩SDK文件并将其拖放到您的项目中:解压缩下载的SDK,并将AWSCore.framework,AWSCognito.framework和AWSSNS.framework文件添加到您的项目中。

b)嵌入框架:通过转到YourProject-> Targets-> General-> Embedded Binaries,嵌入刚添加到项目中的框架。 添加AWSCore.framework,AWSCognito.framework和AWSSNS.framework。

8.将AWSSNS导入到您的应用程序委托中:将AWSSNS框架导入到您的AppDelegate.swift中

 导入AWSSNS 

9. a)创建桥接标头:由于AWS开发工具包是用Objective-C编写的,因此您需要创建一个桥接标头才能使其与Swift一起使用。 单击文件->新建->新建文件。 将文件设为头文件,并将其命名为YourProjectName-Bridging-Header.h

b)将桥接头添加到您的构建设置中:通过转到YourProject-> Targets-> Build Settings-> Swift Compiler-General将桥接头添加到您的项目中。 在“ Swift编译器常规 ”部分下双击“ Objective -C Bridging Header ”以显示弹出窗口。 打开Finder并将您的桥接头文件拖到弹出窗口中。 如果桥接头文件与XCode项目文件位于同一目录中,则只需键入桥接头的名称即可(注意:还包括文件扩展名)。

如果您在创建桥接头时遇到任何麻烦,请单击此处以获取更多信息。

10.将模块导入桥接头文件:打开桥接头文件并添加AWSCore和AWSCognito。

  #ifndef SpreebieSNSExample_Bridging_Header_h 
  #define SpreebieSNSExample_Bridging_Header_h 
  #import  
  #import  
  #endif / * SpreebieSNSExample_Bridging_Header_h * / 

11. 在应用程序委托中创建一个应用程序终结点:AppDelegate.swift文件中,为didRegisterForRemoteNotificationsWithDeviceToken委托方法编写代码。 该代码有两件事:-

a)获取设备令牌并将其保存到您的用户默认值。

b)创建一个应用程序端点,并将其保存到用户默认值。

  func application(_ application:UIApplication,didRegisterForRemoteNotificationsWithDeviceToken deviceToken:Data){ 
  ///将设备令牌附加到用户默认值 
  var令牌=“” 
 对于0中的i。.<deviceToken.count { 
 令牌=令牌+字符串(格式:“%02.2hhx”,参数:[deviceToken [i]]) 
  } 
 打印(令牌) 
  UserDefaults.standard.set(令牌,forKey:“ deviceTokenForSNS”) 
  ///创建平台端点。 在这种情况下,端点是 
  ///设备端点ARN 
 让sns = AWSSNS.default() 
 让请求= AWSSNSCreatePlatformEndpointInput() 
 请求?.token =令牌 
  request?.platformApplicationArn = SNSPlatformApplicationArn 
  sns.createPlatformEndpoint(request!)。continueWith(执行者:AWSExecutor.mainThread(),块:{(任务:AWSTask!)-> AnyObject!in 
 如果task.error!= nil { 
 打印(“错误:\(字符串(描述:task.error))”) 
  }其他{ 
 让createEndpointResponse = task.result! 作为AWSSNSCreateEndpointResponse 
 如果让endpointArnForSNS = createEndpointResponse.endpointArn { 
 打印(“ endpointArn:\(endpointArnForSNS)”) 
  UserDefaults.standard.set(endpointArnForSNS,forKey:“ endpointArnForSNS”) 
  } 
  } 
 返回零 
  }) 
  } 
  func应用程序(_应用程序:_UIApplication,didFailToRegisterForRemoteNotificationsWithError错误:错误){ 
 打印(error.localizedDescription) 
  } 

12. 使用Cognito创建身份池: AWS Cognito管理身份验证,并为您提供安全权限以进行API调用。 因此,对于我们的应用程序而言,要进行SNS API调用,必须有一个标识池,其中列出了所允许的功能。

a)转到Cognito:转到主AWS仪表板并打开Cognito。

b)管理联合身份:单击“管理联合身份”按钮以打开您的身份池页面。

c)创建一个新的身份池:为您的应用程序创建一个新的身份池。

d)填充身份池数据:输入您的身份池名称,并选中“启用对未经身份验证的身份的访问”复选框。

注意:确保接受“身份和访问管理(IAM)”步骤的默认设置。

e)允许访问资源:当您的Cognito要求访问资源时,请确保单击“允许”按钮。

13. 复制示例Cognito代码:打开新标识池的示例代码链接,然后复制标识池ID。 这将在对您的SNS应用程序的所有未经身份验证的API调用中使用。

14. 将Cognito ID添加到您的应用程序委托:将包含您的身份池ID的Cognito代码添加到AppDelegate.swift文件的didFinishLaunchingWithOptions委托方法。

  func application(_ application:UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplicationLaunchOptionsKey:Any]?)->布尔{ 
  //应用程序启动后进行自定义的替代点。 
  ///设置AWS Cognito凭证 
 让凭据提供商= AWSCognitoCredentialsProvider( 
  regionType:AWSRegionType.USEast1,identityPoolId:“ us-east-1:7d5b4064-d730–44ae-a1c3-bdc3d8bdf195”) 
 让defaultServiceConfiguration = AWSServiceConfiguration( 
 区域:AWSRegionType.USEast1,凭据凭证:凭据凭证) 
  AWSServiceManager.default()。defaultServiceConfiguration = defaultServiceConfiguration 
 返回真 
  } 

15. 启用推送功能:在YourProject-> Target-> Capabilities中启用推送通知。

16. 注册推送通知:添加一行代码来注册您的应用程序以获取推送通知。 在您的AppDelegate.swift文件的didFinishLaunchingWithOptions委托方法中,在返回真实布尔值之前,请插入以下代码行。

  registerForPushNotifications(应用程序:application) 

17. 为应用程序实现推送通知:

a)导入本机UserNofications包:导入iOS的本机UserNotifications包,以将您的应用程序转换为通知中心。

 导入用户通知 

b)使您的应用程序委托成为UNUserNotificationCenterDelegate的子类:使您的应用程序成为UNUserNotificationCenterDelegate的子类,以实现启用推送通知的委托方法。

  AppDelegate类:UIResponder,UIApplicationDelegate, UNUserNotificationCenterDelegate { 

c)实现registerForPushNotifications方法:实现您先前在步骤16中包含的registerForPushNotifications方法。

  func registerForPushNotifications(application:UIApplication){ 
  ///通知设置 
 如果#available(iOS 10.0,*){ 
  UNUserNotificationCenter.current()。delegate =自我 
  UNUserNotificationCenter.current()。requestAuthorization(选项:[。徽章,.sound,.alert],completionHandler:{(已授予,错误)在 
 如果(授予) 
  { 
  UIApplication.shared.registerForRemoteNotifications() 
  } 
 其他{ 
  //如果不成功则执行操作… 
  } 
  }) 
  }其他{ 
  let settings = UIUserNotificationSettings(类型:[UIUserNotificationType.alert,UIUserNotificationType.badge,UIUserNotificationType.sound],类别:无) 
  application.registerUserNotificationSettings(设置) 
  application.registerForRemoteNotifications() 
  } 
  } 

d)实现userNotificationCenter委托方法:实现使通知中心正常工作的userNofificationCenter方法。

  //当通知传递到前台应用程序时调用。 
  @available(iOS 10.0,*) 
  func userNotificationCenter(_中心:UNUserNotificationCenter,willPresent通知:UNNotification,withCompletionHandlercompleteHandler:@转义(UNNotificationPresentationOptions)->无效) 
 打印(“用户信息=”,notification.request.content.userInfo) 
  completeHandler([。alert,.badge,.sound]) 
  } 
  //被调用以让您的应用知道用户为给定通知选择了哪个操作。 
  @available(iOS 10.0,*) 
  func userNotificationCenter(_ center:UNUserNotificationCenter,didReceive响应:UNNotificationResponse,withCompletionHandlercompleteHandler:@escaping()-> Void){ 
 打印(“用户信息=”,response.notification.request.content.userInfo) 
  completeHandler() 
  } 

18. 在您创建的角色中启用S​​NS功能:为在步骤12中创建的角色启用SNS功能。

a)转到IAM:转到AWS仪表板,然后单击“安全性,身份和合规性”下的“ IAM”。

b)单击“角色”:单击“角色”以查看已为您的应用程序创建的授权和未授权角色。

c)单击应用程序的未经身份验证的角色打开应用程序的未经身份验证的角色。 该角色将被命名为Cognito_ Unauth_Role

d)将策略附加到角色:将新策略附加到角色。 我们需要启用SNS的策略。 点击“附加政策”按钮。

e)附加SNS策略:通过选中旁边的复选框,然后单击“附加策略”按钮,附加“ AmazonSNSFullAccess”策略。

19. 运行您的应用程序并查看端点:完成所有这些步骤之后,您现在可以在XCode上运行您的应用程序,以便在SNS后端上记录端点。 将您的iPhone连接到计算机,然后通过Xcode在其上运行您的应用程序。 这将为该特定电话创建一个唯一端点。 转到AWS Dashboard-> SNS->应用程序-> YourApplication。 如果该过程成功,您将看到一个新的端点。 现在,选择该端点,然后单击“发布到端点”。

20. 发送通知到您的手机:现在您终于可以使用SNS将通知发送到您的手机上的应用程序。 输入您的第一条SNS消息并发送。 您应该在手机上收到推送通知:)。

成功!!! 您已经为您的应用程序完成了SNS后端! 您可以通过点击此处下载源代码,并且通过遵循此LINK可以Majeshi应用程序上以生产模式查看本教程的实现。

Thabo David Klass Spreebie 的编码器和联合创始人 Majeshi Kascada Precious Kargo的 创建者 Spreebie应用程序

如果您认为本教程有帮助,请几次单击下面的拍击👏按钮以显示支持! 谢谢, :)。 ⬇⬇