2013-01-23 93 views
2

我們在這裏推送服務遇到了一些麻煩.. 我們的應用程序已經在AppStore一段時間了,我們想第一次嘗試我們的推送。不發送給所有人,只發送給我的設備。開發推送與分發推送

我們跟着this guide設置了所有東西,它在開發過程中完美運行。後來,當應用程序在AppStore上運行時,我們對分發做了同樣的事情。 (也許不是這樣的順序)

無論如何,我們從未真正測試推後它(我們的服務是一種新聞服務,並應在我們選擇時發送通知到所有設備)。 我運行了一個調試,在其他sql表中註冊設備的令牌,並直接從appstore重新下載應用程序。我沒有提示註冊通知,但我知道我是第一次這樣做,我甚至可以在設置中看到它。

我用我們的.php網站向表中的'all'設備發送了一條消息(目前只有我的設備),而我什麼都不做。我在iPad上下載了相同的應用程序,令牌被添加到數據庫中,發送了一條新消息,並且沒有人接收到它。

我們將同事的標記添加到同一個數據庫中,他從AppStore下載應用程序,將消息發送到新表格中的所有設備(現在是三個設備),只有他得到了消息。

他的手機可能包含一些早期重要的配置文件,但這是全部正在生產中,而且應該沒有什麼可說的,對嗎?

我現在不知道該怎麼做。我認爲我的iPhone和iPad都被推送服務破壞或忽略,或者我的同事的手機是唯一一個會從此服務收到通知的設備。

當我使用.php代碼到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應用程序時,我得到了老DeviceToken。爲什麼會發生?

回答

1

好,很多麻煩後因這個問題,我終於找到了答案。我們的服務一直都在正常運行。

當我使用我的Xcode項目獲取設備令牌時,我得到了一個設備令牌,用於開發。當我然後嘗試使用我們的AppStore-app發送推送通知給此令牌時,它未通過。

當我從我的同事AppName.app文件,這顯然是生產/釋放 - 模式,從而使數據庫中的不同 deviceToken。

底線: 應用程序提供了不同的deviceTokens爲調試 VS 發佈