2

我们的推送服务在这里遇到了一些问题。我们的应用程序已经在 AppStore 上架了一段时间,我们想第一次尝试我们的 Push。不发送给所有人,只发送给我的设备。

我们按照本指南进行了所有设置,并且在开发过程中运行良好。后来,当应用在 AppStore 上发布时,我们对分发做了同样的事情。(也许不是这个顺序)

无论如何,我们在推送上线后从未真正测试过推送(我们的服务是一种新闻服务,应该在我们选择时向所有设备发送通知)。我运行了一个调试程序,将我的设备令牌注册到与其他设备不同的 sql 表中,然后直接从 appstore 重新下载了应用程序。我没有收到注册通知的提示,但我知道我是第一次这样做,我什至可以在“设置”中看到它。

我使用我们的 .php 网站向表中的“所有”设备(目前只有我的设备)发送消息,但我什么也没做。我在我的 iPad 上下载了相同的应用程序,令牌被添加到数据库中,发送了一条新消息,但他们都没有收到它。

我们将我同事的令牌添加到同一个数据库中,他从 AppStore 下载了应用程序,将消息发送到新表中的所有设备(现在是三个设备),只有他收到了消息。

他的手机可能包含一些早期的重要配置文件,但这一切都在生产中,应该没什么可说的,对吧?

我现在不知道该怎么做。我认为我的 iPhone 和 iPad 都被推送服务损坏或忽略了,或者我同事的手机是唯一会从该服务收到通知的设备..?

当我使用 .php-codefwrite并将通知发送到 gateway.push.apple.com 时,它返回它已成功将消息发送到所有设备(但即使应用程序已从设备中删除也是如此。 )

我自己从我的机器上新创建的请求/密钥/配置文件等创建了 .pem 文件。

我们的推送服务没有发送到我的设备是否有原因?还是到目前为止只属于他?它与证书、配置文件、密钥等有什么关系吗?

编辑

我们现在一直在尝试很多东西,而且它kind of works now,但我不知道发生了什么,以及它现在是如何工作的。

我们做了什么: 我的同事打开了他的 XCode 项目,将所有内容都设置为 Release,然后按下 Build。他给我发了 AppName.app,我把它拖到了 iTunes,并告诉它安装那个应用程序。(现在 AppStore 版本和 Xcode 版本之间的唯一区别是 DeviceTokens 应该注册在另一个表中,正如我之前提到的)。当我启动应用程序时,我注意到注册了第四个令牌。我的意思是我的设备的 deviceToken 已经改变了。我知道这种情况时有发生,但这应该不是问题。当我尝试使用新应用程序发送通知并注册新令牌时,我收到了它。如果我卸载他发给我的版本,然后重新下载 AppStore 版本,并向新设备令牌发送通知,我现在会收到它。

如何?

如果我用旧表交叉检查新表中的设备令牌,它们都在两者上。我最初用来获取我的设备令牌的方法是在其中某处使用不同的 url 构建我的项目,并且我必须先删除 AppStore 版本。运行这个“新”xcode-version 时,它会吐出一个从未在 AppStore-version 中注册过的新令牌,因此当我尝试重新安装 AppStore-version 并仅向该令牌发送通知时,它从未通过 -因为“当前” deviceToken 隐藏在原始表中,而不是新表中。

新问题:

为什么我的 deviceToken 会从一个版本更改为另一个版本?

为了更清楚地了解我认为发生的事情:

1. AppStore-app launch - Table.regDeviceToken = 111;
2. AppStore-app launch2- Tabke.regDeviceToken = 222; //(it updated itself)
3. Xcode launch - Table2.regDeviceToken = 111; //This is the Token I found and used
4. AppStore-app lauch4 - Table1.regDeviceToken = 222 //This is hidden from me, I thought it would be 111.
5. Send push to Table2.DeviceToken=111; //Which does not work
6. Send push to Table.DeviceToken = 222; //Which works

因此,在 Xcode 中启动应用程序时,我得到了 OLD DeviceToken。为什么会发生这种情况?

4

1 回答 1

1

好的,在由于这个问题而头疼之后,我终于找到了答案。我们的服务一直正常运行。

当我使用我的 Xcode 项目获取我的设备令牌时,我得到了一个为Development制作的设备令牌。然后,当我尝试使用我们的AppStore-app向该令牌发送推送通知时,它没有通过。

当我从同事那里得到AppName.app文件时,它显然处于生产/发布模式,因此为数据库提供了不同的deviceToken

底线: 应用程序为Debug和Release提供不同的deviceToken 。

于 2013-01-23T17:51:32.297 回答