开发推送与分发推送

时间:2013-01-23 00:50:23

标签: ios cocoa-touch apple-push-notifications

我们的推送服务遇到了一些麻烦.. 我们的应用已经在AppStore上工作了一段时间,我们想第一次尝试推送。不要发送给所有人,只发送给我的设备。

我们按照this guide设置了所有内容,并且在开发过程中完美运行。后来,当应用程序在AppStore上运行时,我们对分发做了同样的事情。 (也许不是那个顺序)

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

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

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

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

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

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

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

我们的推送服务没有发送到我的设备有什么原因吗?或者到目前为止只对他? 它可能与证书,配置文件,密钥等有关吗?

修改

我们现在已经尝试了一大堆东西,它kind of works now,但我没有想到发生了什么,现在它是如何运作的。

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

如何?

如果我用新表格检查新设备中的设备令牌,它们都在两者上。 我用来获取设备令牌的方法首先是在其中的某个地方使用不同的URL构建我的项目,我必须先删除AppStore版本。当运行这个“新的”xcode版本时,它会吐出一个从未在AppStore版本中注册的新令牌,因此当我尝试重新安装AppStore版本并仅向该令牌发送通知时,它从未通过 - 因为'当前'的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。为什么会这样?

1 个答案:

答案 0 :(得分:1)

好吧,经过这个问题很多麻烦后我终于找到了答案。我们的服务一直在正常运作。

当我使用Xcode项目获取设备令牌时,我获得了为开发设备的设备令牌。当我尝试使用我们的 AppStore-app 向此令牌发送推送通知时,它没有通过。

当我从同事那里得到 AppName.app 文件时,显然是在生产/发布 - 模式中,从而为数据库提供了 DIFFERENT < / strong> deviceToken。

底线: 应用程序为调试发布提供不同的设备标记。