2010-02-17 94 views

回答

6

如果您從設備中刪除您的應用程序,您只需嘗試向該設備發送單個通知,並且下次連接到反饋服務器時,它將返回該設備。直到您嘗試向該設備發送另一個通知時,它纔會再次返回設備。此外,如果您在與反饋服務器的連接之間向設備發送多個通知,則會針對每個拒絕的通知返回設備。

+3

在沙箱模式下不起作用。我從來沒有得到反饋... – jjxtra 2011-11-18 20:47:36

+0

查看評論由DougC – 2012-03-26 07:59:31

4

我意識到這個答案已被接受,但爲了做第一輪測試,而不必經常安裝&從我的手機/ ipod中刪除我的應用程序我創建了一個非常簡單的ruby腳本來充當反饋服務器。我將ruby APNS類配置爲連接到此服務器(localhost:2196)並從中讀取。我沒有初始化一個SSL連接,所以我只是使用了基本套接字。以下是我用來「託管」服務器的腳本。

#!/usr/bin/env ruby 

require 'socket' 

puts 'Opening server' 
server = TCPServer.open(2196) 

loop { 
    puts 'Waiting for connection' 
    client = server.accept 

    puts 'Connected preparing data' 
    data = [1, 2, 3, 4, 0, 32, ['d41c3767074f541814c2207b78f72e538569cb39eae60a8c4a8677549819e174']] 
    puts 'Data for delivery: ' + data.inspect 

    begin 
     data[6] = data[6].pack('H*') 
     data = data.pack('c6a*') 

     loop { 
      puts 'Writing Data' 
      client.write data 

      puts 'Sleeping for 5 seconds' 
      sleep 5 
     } 
    rescue 
    end 
    puts 'Done writing, closing' 
    client.close 
} 

該腳本將偵聽並且每隔5秒收到一次連接時向套接字寫入數據包。如果連接套接字關閉(例如,您終止了您的反饋過程),那麼此腳本將重置並等待新連接。

請記住,不要使用SSL連接的東西只是一個標準的紅寶石套接字。祝你好運!

+0

c:\ telnet localhost 2196 - >工程。 c:\ telnet 127.0.0.1 2196 - >不起作用 奇數。爲什麼會這樣呢? 此外,Indy TcpClient給我一個拒絕的連接。 – 2017-06-21 13:10:29

+1

@ T.S錯誤表示服務器未在127.0.0.1上進行偵聽。 'localhost'並不一定是指127.0.0.1,通過'gethostbyname()'或'getaddrinfo()'查詢查詢可以將其解析爲真正的本地IP地址,'telnet'會嘗試連接,直到成功。但是Indy將'localhost'視爲127.0.0.1,而不是試圖動態解析它。當Indy解析主機名時,它不會嘗試連接到所有報告的IP。這是一個待辦事項。 – 2017-06-21 16:33:07

+0

通過替換此行來修復:「」server = TCPServer.open(「127.0.0.1」,2196)「」 – 2017-07-12 08:15:04

11

我認爲從最初一輪問題「是的,你怎麼會有東西出現在那裏?」實際上來自這樣一個事實,即他的測試沒有返回任何設備,即使他可能已經有了通知成功發送到iPhone/iPad,每當他查詢FB服務器時,什麼都不會回來,正是因爲該應用程序從未從設備中刪除,因此服務器同樣很樂意繼續回答「找到0個設備」(例如)因爲沒有設備無法接收通知。

因此,當應用程序從設備中刪除時,通知服務器將提供一個反饋,即最終將回應移除該應用程序的設備列表。

本地服務器的想法也不錯。

-Alex

==============

這裏是蘋果公司的建議,以保持至少一個推使應用討厭的副作用。以下是我對線程發佈的文檔的建議:

關於「反饋服務器問題」,有趣的是要注意兩種情況: 1)在生產模式下將應用部署到真實設備; 2)應用程序部署到開發設備,沙箱;

在1)提示離開最後一個應用程序(我期望它)是正確的,應該像描述的那樣工作;這裏沒有問題。

在2)上,必須確保最後一個應用程序也是一個開發應用程序。或者換句話說,爲了讓事情變得更簡單,有第二個「沙盒應用程序」,只有在那裏按「最後的人開關」。

我遇到的問題是,一旦我刪除了我的開發應用程序,即使設備上還有其他推送應用程序,沙盒反饋服務器上也沒有任何反應,但它們都是生產應用程序,因此它們會向生產反饋服務器「報告」(如果可以這樣說的話)。

您的應用程序的第二個副本(沙盒應用程序)就是我們想要的,所以它可以保持與沙盒服務器的持續連接...然後當您刪除「測試的應用程序」時,您的沙盒應用程序將有希望地報告給沙箱,你可以做你的實際測試。

希望這是正確的......將測試tonite。

+8

我可以確認您確實需要使用沙盒服務器的設備上的第二個應用程序才能獲得關於您正在測試的應用程序的反饋。這可以簡單地作爲一個簡單的應用程序與行:[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert];在應用程序委託的didFinishLaunchingWithOptions方法中。 – DougC 2011-03-21 09:54:02

+0

@DougC如何創建第二個應用程序。如果使用相同的證書來創建並更改應用程序的名稱,則第二個將替換第一個。可以給我一些關於它的建議。非常感謝你! – Judy 2013-01-21 07:34:55

+0

蘋果在哪裏注意到這兩種情況?這是一個了不起的答案,但你從哪裏找到這個來源? – 2015-12-18 16:04:24