2012-06-27 48 views
1

我創建所有證書來開發推送通知我的應用iPhone。 如果我使用由開發人員證書創建的文件.pem進行測試,它可以工作,但是如果使用由生產證書創建的文件.pem,則不起作用。分發推送通知

這是我的代碼:

public function push($deviceToken,$badge,$message,$deviceType) { 

       $sound = "default"; 

       // Construct the notification payload 
       $body = array(); 
       $body['aps'] = array("alert" => $message); 

       if ($badge) 
        $body['aps']['badge'] = $badge; 
       if ($sound) 
        $body['aps']['sound'] = $sound; 

       $ctx = stream_context_create(); 
       stream_context_set_option($ctx, 'ssl', 'local_cert', 'apns-prod.pem'); 
       $fp = stream_socket_client("ssl://gateway.push.apple.com:2195", $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); 

       if (!$fp) { 
        print "Failed to connect $err $errstrn"; 
        return; 
       } else { 
        print "Connection OK\n"; 
       } 

       $payload = json_encode($body); 
       $msg = chr(0) . pack('n',32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack('n',strlen($payload)) . $payload; 
       fwrite($fp, $msg); 
       fclose($fp); 

    } 

任何建議?當你發送通知到與一個特設分發證書(或最終版)簽署了一項應用

+0

HI達尼,能否請您更新此,以解決方案爲你工作。謝謝 –

回答

0

生產推送證書纔有效。開發人員推送證書僅適用於使用開發人員分發證書籤名的應用程序(即從XCode安裝到設備)。

+0

我的應用程序在分發證書的蘋果商店。現在我需要爲我的應用添加推送通知發送更新。任何建議? – Dany

+0

如果您正在使用生產證書進行測試,那麼只有在您通過AppStore發佈應用程序或通過特設分發安裝應用程序時,纔會看到通知。 –

+0

我該如何確定它的工作原理,無需等待Apple的批准? – Dany

0

你可以通過改變你計劃性嘗試你的產品證書:

  • 點擊你的目標計劃,在Xcode的窗口,然後編輯計劃的左上角。

  • 在「運行yourTarget」標籤中,設置作爲Release構建配置和「無」作爲調試器。

  • 當然,你的目標必須有一個特設provisionning配置文件中配置。

  • 將您的iPhone,並與iOSDevice配置運行。

是否行得通?

編輯:我appologizes,我會說Release,而不是Ad-hoc(我糾正它)

+0

,但我的應用程序是公開的蘋果商店不是臨時的 – Dany

+0

我會說'釋放'。生產推送證書與'Release'和'App store'版本相同。如果它在'Release'上工作,它將在'App store'上運行 – Martin

0

一定要後推過程中創造的證書創建一個新的即席和AppStore的或分發證書。 adhoc和appstore證書更改爲推送應用程序。