我正在實現一個使用Java Spring Framework伺服器,使用Swift向iPhone發送Apple推送通知。以下是你將需要的東西:

1. 設定帳戶

假設您已經有一個帶有證書的Apple開發者帳戶,登入 Apple Developer,前往 Identifiers 分頁並點擊”+” 新增一個。填寫前綴和後綴,然後記住勾選 “推送通知” 的箱子。

Image1 Image2

接下来,选择 編輯,滚到 推送通知部分。在这里,你会看到“能够配置”的橙色指示器。使用你的CSR文件创建并下载Development SSL证书。双击运行它,并将其添加到你的钥匙链。

Image3

开启 钥匙链访问,找到证书,并将其导出为 .p12 文件。你会被提示输入密码 - 不要将其留空。否则,Java Spring应用程序可能无法解析空字符串。将此文件保存以供以后使用。

Image4

2. Xcode 設置

建立一个新的Xcode项目,例如一个单视图应用。在功能分頁中,開啟“推送通知”並用你的Apple ID登入。

Image5

AppDelegate.swift 中,新增一個方法來建立一個設定的實例,這將在應用啟動時提示用戶許可:

func registerForPushNotifications(application: UIApplication) {
  let notificationSettings = UIUserNotificationSettings(forTypes: [.Badge, .Sound, .Alert], categories: nil)
  application.registerUserNotificationSettings(notificationSettings)
}

当应用完成启动时调用此方法:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
  // Override point for customization after application launch.
  registerForPushNotifications(application)
  return true
}

在同一個 AppDelegate.swift 文件中,新增方法以處理用戶的權限決定:

func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) {
  if notificationSettings.types != .None {
    application.registerForRemoteNotifications()
  }
}

如果注册成功,新增:

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
  let tokenChars = UnsafePointer<CChar>(deviceToken.bytes)
  var tokenString = ""

  for i in 0..<deviceToken.length {
    tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]])
  }

  print("Device Token:", tokenString)
}

如果注册失败:

func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
  print("Failed to register:", error)
}

測試時,您將需要一個實體設備;模擬器將無法使用。如果成功,您應該在控制台中看到設備令牌。记下这个供后来使用。

Image6

3. Java Spring 服务器设置

使用你喜欢的IDE(如NetBeans或IntelliJ)创建一个Java Spring Framework服务器。在这个例子中,我们正在使用一个配备pom.xml文件的Maven构建:

<!-- pom.xml content -->

我们将使用来自Maven Repository的 notnoop库。将此依赖项添加到你的 pom.xml:

<dependency>
  <groupId>com.notnoop.apns</groupId>
  <artifactId>apns</artifactId>
  <version>1.0.0.Beta6</version>
</dependency>

服务器启动时,它会寻找主类,例如 PushNotificationApplication.java

// PushNotificationApplication.java content

为了演示目的,我们将创建一个 NotificationController.java

// NotificationController.java content

用你真正的 .p12 文件路径,密码,和设备令牌替换代码中的占位符。如果您对文件路径不确定,将 .p12 文件放在 /src 文件夹的同一级别,即项目文件夹的根目录。

运行以下命令以安装并启动服务器:

mvn install
mvn spring-boot:run

打开你的浏览器并导航到 http://localhost:8080/notification。你应该收到通知!

Image7

如果你有任何疑問,隨時聯絡我 :)


注意:代码块 (XML, Swift, 和 Java) 内的内容未作更改。确保内容准确且最新。