2015-05-27 14 views
9

io uso questo codice in php ...ad affrontare problemi a Ios spingere notifica codice php

function pushnotificationios($deviceToken, $message, $badges){ 
     $passphrase = "12345"; 
     $ctx = stream_context_create(); 
     stream_context_set_option($ctx, 'ssl', 'local_cert', $_SERVER['DOCUMENT_ROOT'].'/include/ck.pem'); 
     stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 
     $fp = stream_socket_client(
      "ssl://gateway.push.apple.com:2195", $err, 
     $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 
     $body['aps'] = array(
      //'badge' => $badges, 
      'badge' => "+1", 
      'alert' => $message['message'], 
      'sound' => 'default', 
      'content-available' => '1' 
     ); 
     $body['msg'] =$message; 
     $payload = json_encode($body); 
     $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; 
     $result = fwrite($fp, $msg, strlen($msg)); 
//echo "<pre>"; print_r($result); 
     fclose($fp); 
     return $result; 
    } 

file .pem e la loro password siano corretti. ma quando premo questa funzione, solo in modalità di produzione mi restituisce false;

$result = pushnotificationios($deviceToken, $message, $badges); 
echo "<pre>"; print_r($result); 

E ci vuole troppo tempo per la risposta.

Attualmente non trovo alcuna soluzione .. la mia API sta per Apple e le mie notifiche non funzionano. La cosa interessante è che è un'app di chat e l'intera app si basa sulle notifiche. È una brutta giornata per me.

Si prega di aiutare se qualcosa accade bene per me per l'app.

+0

rilevando trovato alcuna soluzione .. :-( –

+0

Hi Suresh, 1) Il problema potrebbe essere la creazione di file PEM, verificare se si dispone di usato il certificato corretto per l'app PROD. 2) A volte la notifica push non può essere inviata dal server Apple dopo il raggiungimento, la durata della notifica è solo di 30 minuti. Se non viene inviato entro tale orario, la notifica non verrà più inviata per il messaggio. –

+0

Aggiungere questo codice e verificare se la connessione con il server APNS funziona o meno. 'if (! $ fp) {exit (" Impossibile connettersi: $ err $ errstr. "PHP_EOL);}' –

risposta

2

Produzione:

ssl: //gateway.push.apple.com: 2195

.

Sviluppo:

ssl: //gateway.sandbox.push.apple.com: 2195

Nella mia app. Io sono sempre direttamente deviceToken che è in NSData

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{ 
    NSString *deviceTokenString = [NSString stringWithFormat:@"%@", deviceToken]; 
    // this is producing something like: 
    // <xxxxxxx 9b0f527f xxxxxxxx 2727ed28 xxxxxxxx 4e693a61 xxxxxxx ac2f7dbb> 
    // 
    // and i am directly saving that to my servers database 

Ecco quello che ho nel mio server.

$from_database = "<xxxxxxx 9b0f527f xxxxxxxx 2727ed28 xxxxxxxx 4e693a61 xxxxxxx ac2f7dbb>"; 

// this removes the '<' and '>' to make the device token valid 
// 
$token_string = substr($from_database, 1, -1); 

$token_array[] = $token_string; 

// you can also add multiple 'token_string' to the 'token_array' for push notification broadcasting, i am currently doing that and it is working properly. 

... 

public function __push_notification($message_input, $token_array) 
{ 
    $message = stripslashes($message_input); 

    $passphrase = 'xxxxxx'; 

    $cert = realpath('xxx.pem'); 

    $payload = '{ 
     "aps" : 
      { 
       "alert" : "'.$message.'", 
       "badge" : 1, 
       "sound" : "bingbong.aiff" 
      } 
    }'; 

    $ctx = stream_context_create(); 
    stream_context_set_option($ctx, 'ssl', 'local_cert', $cert); 
    stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 

    $fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 

    if (!$fp) 
    { 
     // echo "Failed to connect $err $errstr <br>"; 

     return; 
    } 
    else 
     // echo "Post notification sent<br>"; 

    $dev_array = array(); 

    $dev_array = $token_array; 

    foreach ($dev_array as $device_token) 
    { 
     $msg = chr(0) . 
       pack("n", 32) . 
       pack('H*', str_replace(' ', '', $device_token)) . 
       pack("n", strlen($payload)) . 
       $payload; 

     // echo "sending message :" . $payload . "n"; 

     fwrite($fp, $msg); 
    } 
    fclose($fp); 
} 

Se ancora non puoi inviare controllo Notifica questa Troubleshooting Push Notifications

Modifica

Ho cercato a vostra notifica push spinta, qualche tempo fa, poi ho notato che il vostro 'badge' => "+1" Non è possibile incrementare il badge in questo modo.

L'unica opzione è quella di gestire nella vostra applicazione e l'utilizzo di database per tenere in pista ..

e forse sta causando il problema .. e badge deve essere un numero, qui: Table 3-1

e verificare anche questo discussion potrebbe aiutare pure ..

+1

Questo lavoro sulla modalità di sviluppo non in modalità di produzione .. ssl: //gateway.sandbox.push.apple.com: 2195 ho pagato per te è il suo funzionamento, ma già lo uso su modalità di sviluppo, ma non funziona sulla produzione modalità. –

+0

hai provato ad usare il codice sopra di esso? non preoccuparti di pagare sto solo scherzando su quello .. hahaha .. se questo non funziona, è strano, perché stiamo usando questo .. hahaha – 0yeoj

+0

sì -------------- ------------------------------------------- –

5

in modalità di produzione non usano sandbox url

$fp = stream_socket_client(
     "ssl://gateway.push.apple.com:2195", $err, 
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 
+1

Quando lo implemento e vivo in produzione, la notifica sta funzionando, ma dopo che aproval da apple improvvisamente non funziona, non so come? –

+0

quindi controllare se il file pem viene estratto dal certificato di sviluppo o di distribuzione dal lato ios – Babar

+1

nessun team ios dice "distribuzione cretificate non viene estratto dallo sviluppo" sono diversi. –

0

Yup .. finalmente ho avuto la soluzione.

Il problema è la porta. Sto usando il server Bluehost. Bluehost blocca la porta utilizzata dalla notifica push.Ora ho cambiato il mio server e le notifiche di lavoro per me .. Grazie a tutti Budy

+0

Quindi, è davvero la porta ... Felice di averlo fatto, congratulazioni .. :) – 0yeoj

+0

per fare ciò controllo la stessa funzione su due o tre server diversi. PushNotification IOS non funziona su server condiviso. –

+0

anche io sto affrontando lo stesso problema ... puoi per favore fornirmi dettagli su come consentire determinate porte sul server BLUEHOST ... ??? –

Problemi correlati