2012-06-27 165 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证书更改为推送应用程序。