2015-12-16 15 views
6

Với ứng dụng của tôi trên App Store, thông báo đẩy không hoạt động. Với ứng dụng của tôi trong Phát triển, thông báo đẩy đang hoạt động.Thông báo đẩy của Apple không hoạt động trong sản xuất

Tôi đoán tôi nên thử nghiệm thông qua triển khai Ad Hoc. Dù sao, đây là những gì tôi biết ...

App ID

ID App của tôi là com.MyName.My-App

Nó có Đẩy Thông báo kích hoạt cho phát triển và phân phối

enter image description here

APN Certificates

Tôi có cả chứng chỉ Phát triển và Phân phối. Đó là Quận tôi quan tâm.

enter image description here

Nó có tên com.MyName.My-App

xuất sang PEM

tôi đã chọn cả Cert và khóa bí mật, và xuất khẩu nó, như sau:

enter image description here

và được bảo vệ bằng mật khẩu nó.

sau đó tôi chạy

openssl pkcs12 -in Certificates.p12 -out pushcert.pem -nodes -clcerts 

cung cấp mật khẩu, và nhận được thành công pushcert.pem đầu ra.

Tải App

tôi xóa bởi phía máy chủ thẻ thiết bị cho điện thoại của tôi, tôi tải về ứng dụng của tôi từ cửa hàng ứng dụng, mở nó ra và chấp nhận Notifications Push, và sau đó đăng nhập vào máy chủ của tôi để kiểm tra thiết bị thẻ của tôi . Tôi có mã thông báo thiết bị sản xuất của mình ngay bây giờ. Tôi chạy tập lệnh php đơn giản này (hoạt động khi tôi cung cấp mã thông báo thiết bị phát triển) nhưng không thành công với mã thông báo thiết bị sản xuất của mình.

<?php 

// Put your device token here (without spaces): 
$deviceToken = 'myProductionDeviceTokenInHere'; 

// Put your private key's passphrase here: 
$passphrase = 'myPasswordIsInHere'; 

// Put your alert message here: 
$message = 'Test'; 

//////////////////////////////////////////////////////////////////////////////// 

$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'local_cert', 'pushcert.pem'); 
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 
stream_context_set_option($ctx, 'ssl', 'cafile', 'entrust_2048_ca.cer'); 

// Open a connection to the APNS server 
$fp = stream_socket_client(
    'ssl://gateway.push.apple.com:2195', $err, 
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 

if (!$fp) 
    exit("Failed to connect: $err $errstr" . PHP_EOL); 

echo 'Connected to APNS' . PHP_EOL; 

// Create the payload body 
$body['aps'] = array(
    'alert' => $message, 
    'sound' => 'default' 
    ); 

// Encode the payload as JSON 
$payload = json_encode($body); 

// Build the binary notification 
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; 

// Send it to the server 
$result = fwrite($fp, $msg, strlen($msg)); 

if (!$result) 
    echo 'Message not delivered' . PHP_EOL; 
else 
    echo 'Message successfully delivered' . PHP_EOL; 

// Close the connection to the server 
fclose($fp); 

Tại sao nó không thành công? Nó hoạt động với mã thông báo thiết bị phát triển của tôi, chứ không phải mã thông báo thiết bị sản xuất của tôi. Tôi đã không làm một cái gì đó một cách chính xác?

+0

bạn hãy thử tạo adhoc với chứng chỉ hiện tại để thông báo đẩy? Có thể bổ sung của bạn trên giấy chứng nhận khác biệt sử dụng cửa hàng. –

+0

Xin chào! Bạn đã thử giải pháp của tôi chưa? –

+0

@JulianE. Chưa phải tôi sẽ có cơ hội trong những ngày lễ trong vài ngày tới để cho nó đi. –

Trả lời

3

Điều đang xảy ra mà bạn có thể đang phân phối với cấu hình cung cấp sai. Để nhận thông báo đẩy trong bản phát hành cuối cùng, bạn cần phải cài đặt cấu hình cấp phép mới nhất mà bạn đã bật Thông báo đẩy để phân phối. Đây là lỗi phổ biến nhất và tôi đã gặp phải một hoặc hai lần trong quá khứ.

Vì vậy, bây giờ bạn phải thực hiện các bước sau:

  • Đăng nhập vào Trung tâm Nhà phát triển của Apple
  • Tạo một Provisioning hồ sơ mới cho id ứng dụng này để phân phối Screenshot
  • Tiếp tục để thiết lập nó lên đầy đủ, bằng cách nhập tất cả các chi tiết cần thiết
  • Tải xuống hồ sơ và nhấp đúp vào hồ sơ để cài đặt hồ sơ
  • Trong dự án của bạn dưới Build Settings-> Code Signing -> Distribution chọn tiểu sử mới được tạo của bạn
  • Bây giờ, thông báo đẩy cũng sẽ tiếp cận người dùng cuối trong Bản dựng phân phối.

Hy vọng điều đó sẽ giúp ích cho Julian.

+0

Tôi đã tạo một Hồ sơ cấp phép quảng cáo mới thay vì hồ sơ trên App Store, để kiểm tra xem điều đó có hoạt động trước hay không ... trước khi tôi tạo Phân phối, hãy đẩy nó vào App Store và đợi 2 tuần. Bằng cách này tôi có thể kiểm tra xem Ad Hoc có hoạt động ngay lập tức không. Dù sao, nó đã không: @. Vấn đề này đang giết chết tôi! –

+0

Vì vậy, bạn đã thực hiện một Ad Hoc một, cài đặt nó trong Xcode và nó đã không hoạt động? –

+0

Yup. Tôi đang giết tất cả mọi thứ trong trung tâm thành viên của tôi ngay bây giờ. Làm sạch tất cả. Sẽ ghi lại màn hình của tôi thông qua QuickTime và thiết lập tất cả mọi thứ, và xem nếu nó không thành công một lần nữa. Sau đó, ít nhất là theo cách này, tôi sẽ ghi lại tất cả các bước của mình. –

0

Đảm bảo bạn không sử dụng chứng chỉ hộp cát trên máy chủ! bạn phải thay đổi điều này để nó hoạt động từ sandbox đến prod.

0

Hóa ra đó là một vấn đề với bên thứ ba Ruby Gem tôi đang sử dụng (rpush). Không chắc chắn chính xác những gì, nhưng ngay sau khi tôi chuyển nó ra, mọi thứ đều tuyệt vời.

Các vấn đề liên quan