gpt4 book ai didi

ios - 推送通知不只从我的设备发送 - 解析

转载 作者:可可西里 更新时间:2023-11-01 02:19:51 25 4
gpt4 key购买 nike

我有一个应用程序目前处于 Beta 测试阶段,它具有消息传递功能。它设置为在用户收到来自另一个用户的新消息时发送推送通知。推送通知唯一有效的时间是用户专门向我发送消息时。如果我尝试向任何其他用户发送消息或任何不包括我的用户相互发送消息,推送通知将不起作用。只有发送给我的消息才会在我的设备上触发推送通知。

以下是 Parse 的一些简单屏幕截图,显示了一个正确发送的推送和一个没有发送的推送。

这是从另一个名为“Alissa”的用户发送给我的私有(private)消息,我在其中正确接收了推送通知(如“推送发送”= 1 所示):

working push notification

以下是上述推送的详细信息:

working push notification details

现在,这是从我的设备发送的私有(private)消息,与正确接收推送通知的设备相同,返回“Alissa”。如您所见,“推送已发送”= 0,这意味着我的设备发送了消息,但收件人没有收到推送通知:

not working push notification

这是该推送的详细信息,其中包含与发送给我的工作中的信息几乎相同的信息:

not working push notification details

最后,这是在“Alissa”和不是我的另一个用户之间发送的另一个无法正常工作的推送,因此有 2 个用户与我的设备分开。

enter image description here
enter image description here

这是我查看应用程序中用户的所有推送列表时的模式。他们都有“推送发送”= 0,除了当推送发送到我的设备时,“推送发送= 1”。

我已经在我的推送通知方法完成处理程序中打印到控制台,当我向另一个用户发送消息时,它们表明推送已成功发送。我还将指出我的设备正在用于开发此应用程序。

另外作为旁注,它并不总是像这样。几周前,一切正常。我发布了多个新版本,从来没有遇到过问题。

任何人都可以在这里指导我正确的方向吗?

Edit: Below I've included more details including code in my app and details of my developer account and Parse backend.



我的应用程序中的相关代码

以下是我在 AppDelegate 中的代码,由 Parse 推荐,用于设置推送通知。值得注意的是 println语句“did register user notification settings”和“did register for remote notification with device token”都在应用程序启动时正确记录。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// ...
let userNotificationTypes = UIUserNotificationType.Alert | UIUserNotificationType.Badge
let settings = UIUserNotificationSettings(forTypes: userNotificationTypes, categories: nil)
application.registerUserNotificationSettings(settings)
application.registerForRemoteNotifications()
// ...
}

func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) {
println("did register user notification settings")
}

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
PFInstallation.currentInstallation().setDeviceTokenFromData(deviceToken)
PFInstallation.currentInstallation().saveInBackground()
println("did register for remote notifications with device token")
}

func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
println("didFailToRegisterForRemoteNotificationsWithError: ", error.localizedDescription)
}

这是我在向另一个用户发送消息时包含的代码。 println也不值钱语句“成功”已正确记录。
    PFInstallation.query().whereKey("user", equalTo: incomingUser)

PFPush().setQuery(pushQuery)
let senderName = PFUser.currentUser()!.objectForKey("name") as! String
let data = [
"alert" : "New message from \(senderName)",
"badge" : "Increment"
]
push.setData(data)
push.sendPushInBackgroundWithBlock { (success: Bool, error: NSError?) -> Void in
if success {
println("success")
} else {
println(error?.localizedDescription)
}
}

来自我的开发者帐户的相关详细信息

这是在我的开发人员门户中显示我的 App ID 的屏幕截图。它似乎表明推送通知已正确启用(我删除并使用新的配置文件重新添加了所有证书)

Push notifications enabled in developer portal

来自我的 Parse 帐户的相关详细信息

这是我在 Parse 中的推送通知设置。所有这些信息都是昨天在我重新创建证书时更新的。

Parse push notification settings

这可能会提供一定程度的洞察力,尽管我不确定是什么。这是我在 Parse 中的 PFInstallations 表的屏幕截图。每当有人登录/打开应用程序时,就会创建安装。我刚刚在我的设备上运行了应用程序,我在表中的记录是最上面的。与其余部分不同的是,“deviceToken”列中有一个仅适用于我的设备的值。当我删除我的 PFInstallation 记录并重新启动应用程序以重新创建它时,总会在“deviceToken”下创建一个值。

enter image description here

来自Xcode的相关细节

这是我的 Xcode build设置中代码签名的扩展 View 。此代码签名在项目和目标代码签名中是相同的。

enter image description here
enter image description here

同样,推送通知适用于所有向其他用户发送消息的用户,只有在从我的设备向任何其他用户发送消息时才有效。

最佳答案

从使您的设备与众不同的原因开始,它作为开发环境设备的状态可能是罪魁祸首。

检查设备的构建和随后使用的推送证书是一个很好的检查位置。如果您的设备处于开发模式(意味着您正在通过 Xcode 构建和部署到您的手机),那么它将使用推送证书进行开发而不是生产。 (有关此差异的更多信息,请参阅 this great article by Ray Wenderlich )

这里的关键因素是只有您的设备会使用这个不同的证书。如果它被撤销/损坏/未安装,则只有您的设备会出现此问题。

您还可以通过 TestFlight/HockeyApp/等将应用程序部署到您的手机来测试这一点,而不是让 Xcode 加载它。

更新:

只是倒在代码上,检查错误。一件事已经值得注意:您的 didFinishLaunchingWithOptions包括一个额外的 PFInstallation.currentInstallation().saveInBackground() - 你应该删除它,并且只在 didRegisterForRemoteNotificationsWithDeviceToken 中有它方法。

这就是为什么只有您的设备在它的 PFInstallation 中有一个 ID,并且可能是为什么您的设备无法访问其他任何人的原因 - 推送系统正在工作,但没有可以从那里调用的地址;这将是推送时的静默失败,而不是解析系统。

您是否尝试过让您的用户相互发送推送,或者只发送给您和您发送?

关于ios - 推送通知不只从我的设备发送 - 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31549081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com