为什么来自 parse.com 的推送只能到达一台设备?

Why does push from parse.com reach only one device?

我尝试实现推送。我有以下代码

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        if application.applicationState != UIApplicationState.Background {
        // In that case, we skip tracking here to avoid double counting the app-open.

        let preBackgroundPush = !application.respondsToSelector("backgroundRefreshStatus")
        let oldPushHandlerOnly = !self.respondsToSelector("application:didReceiveRemoteNotification:fetchCompletionHandler:")
        var pushPayload = false
        if let options = launchOptions {
            pushPayload = options[UIApplicationLaunchOptionsRemoteNotificationKey] != nil
        }
        if (preBackgroundPush || oldPushHandlerOnly || pushPayload) {
            PFAnalytics.trackAppOpenedWithLaunchOptions(launchOptions)
        }
    }
    if application.respondsToSelector("registerUserNotificationSettings:") {
        let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
        application.registerUserNotificationSettings(settings)
        application.registerForRemoteNotifications()
    } else {
        let types : UIRemoteNotificationType =  [.Badge, .Alert, .Sound]
        application.registerForRemoteNotificationTypes(types)
    }
  }

对于订阅,我在 viewDidLoad

中使用以下代码
let currentInstallation = PFInstallation.currentInstallation()
    currentInstallation.addUniqueObject("Giants", forKey: "channels")
    currentInstallation.saveInBackground()

问题是当我发送推送时只有一台设备接收到它。出于测试目的,我将第二台设备连接到 Xcode,但它没有收到推送消息。

对于设置,我使用了开发证书。

开发证书有什么限制还是我做错了什么?

这里有几件事你应该记住。

  1. 最好在 App Delegate 中为设备注册推送通知。绝不是你的方法错了,只是通常你在 App Delegate 中这样做(参见 Parse 文档)
  2. 您无法使用模拟器接收推送通知。您需要有一个实际的设备。

现在,如何查看哪里可能出了问题。

  1. 在您的 Prase 仪表板中,您应该会看到一个名为 installations 的 class。在那里你应该有两个设备。如果您只看到一个设备,则表示只有第一台设备已注册。要解决此问题,您可以将代码移至 App Delegate,重新 运行 程序或设置断点以查看它是否甚至到达此代码。
  2. 检查频道的安装文件。您应该会看到一个名为频道的列,您应该在其中为两种设备设置巨人。如果这里没有出现问题,并且您只针对一台设备。要修复此错误,您只需删除应用程序或手动添加 Channels

  3. 您可能遇到的另一个可能的错误是您拒绝了发送推送通知的权限。确保在第二台设备上启用了此功能。为此,请转至 设置 -> 通知 -> "YOUR APP NAME" -> 将 允许通知 切换为开启。和 select 例如横幅。

  4. 检查您是否在 Xcode 中安装了包含这两个设备的正确配置文件。 这是正确答案。提问者在聊天时发现了这一点。用这两种设备更新配置文件解决了他的问题。

希望对你有所帮助,朱利安