为什么来自 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,但它没有收到推送消息。
对于设置,我使用了开发证书。
开发证书有什么限制还是我做错了什么?
这里有几件事你应该记住。
- 最好在 App Delegate 中为设备注册推送通知。绝不是你的方法错了,只是通常你在 App Delegate 中这样做(参见 Parse 文档)
- 您无法使用模拟器接收推送通知。您需要有一个实际的设备。
现在,如何查看哪里可能出了问题。
- 在您的 Prase 仪表板中,您应该会看到一个名为 installations 的 class。在那里你应该有两个设备。如果您只看到一个设备,则表示只有第一台设备已注册。要解决此问题,您可以将代码移至 App Delegate,重新 运行 程序或设置断点以查看它是否甚至到达此代码。
检查频道的安装文件。您应该会看到一个名为频道的列,您应该在其中为两种设备设置巨人。如果这里没有出现问题,并且您只针对一台设备。要修复此错误,您只需删除应用程序或手动添加 Channels
键
您可能遇到的另一个可能的错误是您拒绝了发送推送通知的权限。确保在第二台设备上启用了此功能。为此,请转至 设置 -> 通知 -> "YOUR APP NAME" -> 将 允许通知 切换为开启。和 select 例如横幅。
- 检查您是否在 Xcode 中安装了包含这两个设备的正确配置文件。 这是正确答案。提问者在聊天时发现了这一点。用这两种设备更新配置文件解决了他的问题。
希望对你有所帮助,朱利安
我尝试实现推送。我有以下代码
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,但它没有收到推送消息。
对于设置,我使用了开发证书。
开发证书有什么限制还是我做错了什么?
这里有几件事你应该记住。
- 最好在 App Delegate 中为设备注册推送通知。绝不是你的方法错了,只是通常你在 App Delegate 中这样做(参见 Parse 文档)
- 您无法使用模拟器接收推送通知。您需要有一个实际的设备。
现在,如何查看哪里可能出了问题。
- 在您的 Prase 仪表板中,您应该会看到一个名为 installations 的 class。在那里你应该有两个设备。如果您只看到一个设备,则表示只有第一台设备已注册。要解决此问题,您可以将代码移至 App Delegate,重新 运行 程序或设置断点以查看它是否甚至到达此代码。
检查频道的安装文件。您应该会看到一个名为频道的列,您应该在其中为两种设备设置巨人。如果这里没有出现问题,并且您只针对一台设备。要修复此错误,您只需删除应用程序或手动添加
Channels
键您可能遇到的另一个可能的错误是您拒绝了发送推送通知的权限。确保在第二台设备上启用了此功能。为此,请转至 设置 -> 通知 -> "YOUR APP NAME" -> 将 允许通知 切换为开启。和 select 例如横幅。
- 检查您是否在 Xcode 中安装了包含这两个设备的正确配置文件。 这是正确答案。提问者在聊天时发现了这一点。用这两种设备更新配置文件解决了他的问题。
希望对你有所帮助,朱利安