2013-01-08 7 views
5

私は開発者フォーラムでもこの質問をしましたが、私の時間がなくなり、stackoverflowでの投稿がより早くなることが期待されました。チタンモバイルプッシュ通知コールバックが発生していません

現在、私はプッシュ通知を受け取ることができ、私はいくつかの余分なデータを一緒に送信したいと考えています。このアイデアは、プッシュ通知が発生したときに(ユーザーの受信ボックスからの)メッセージをユーザーの受信トレイから設定することで、ユーザーは「新しいメッセージ」と呼ばれるプッシュ通知を取得し、それに加えて別のキープッシュ通知callbackが呼び出されたときにApplications.Propertiesに保存されるはずです。

ただし、callback機能は実行されません。通知は送信され、バッジは私のPHPスクリプトと同様にメッセージに設定されています。コールバックがトリガされたかどうかをテストするために、バッジとメッセージをハードコードされた値に変更しました(下記参照)。このコードは主にios muncherから取得しましたが、callbackのアラートはユーザーに表示されます。

私が気づいたのとは違って、ユーザーがアプリを使用していないときにプッシュ通知を受け取るだけなので、バックグラウンドで実行されているときです。ユーザーがアプリのプッシュ通知を表示していないときは、コールバックが発生していない可能性があると考えました。

ご協力いただきありがとうございます。

Titanium.Network.registerForPushNotifications({ 
    types: [ 
      Titanium.Network.NOTIFICATION_TYPE_BADGE, 
      Titanium.Network.NOTIFICATION_TYPE_ALERT, 
      Titanium.Network.NOTIFICATION_TYPE_SOUND 
     ], 
     success:function(e){ 
      var deviceToken = e.deviceToken; 
      Ti.API.info("Push notification device token is: "+deviceToken); 

      //alert('device token is' +e.deviceToken); 
      var request = Titanium.Network.createHTTPClient(); 

      request.open("POST","http://*********/sendToken.php"); 
      var params = { 
       "token": e.deviceToken, 
       "username": authProperties[0].username, 
       "userId": authProperties[0].userId  
      }; 

      request.send(params); 

      Ti.API.info("Push notification types:   "+Titanium.Network.remoteNotificationTypes); 
    Ti.API.info("Push notification enabled:"+Titanium.Network.remoteNotificationsEnabled); 
}, 
error:function(e){ 
    alert("Error during registration: "+e.error); 

    Ti.API.info("Error during registration: "+e.error); 
}, 
callback:function(e) 
{ 
    // called when a push notification is received. 
    //Titanium.Media.vibrate(); 
    var data = JSON.parse(e.data); 

    request.open("POST","http://*********/callback.php"); 
    var params = { 
     "token": e.deviceToken, 
     "username": authProperties[0].username, 
     "userId": authProperties[0].userId  
    }; 

    request.send(params); 

    // Message data for the inbox 
    var inboxData = data.inbox;  

    Titanium.App.properties.setString("badgeCount",data.badge); 

    var badge = data.badge; 
    if(badge > 0){ 
     Titanium.UI.iPhone.appBadge = 202;//badge; 
    } 

    var message = data.message; 
    if(message != ''){ 
     var my_alert=Ti.UI.createAlertDialog({title:'',message:JSON.stringify(inboxData) }); 

     my_alert.show(); 
    } 
} 
}); 

次のスクリプトは、プッシュ通知のPHPの一部を処理します:いくつかのコードの下に

解決

$serverId = "81273"; 
    $name = "APNS"; 
    $apnsPort = 2195;//5223; 
    $passPhrase = ""; 
    $fwrite = ""; 
    $sslUrl = "ssl://gateway.push.apple.com:" . $apnsPort; 
    $apnsCert = "./apns-distr.pem";//give the apns.pem file path on your server 
    $badge = 22; 
$message = "[". date("d-m-Y h:i:s") . '] Er is een nieuw bericht voor u.'; 
$inboxArray = array(); 
$inboxArray["id"]= 1; 
$inboxArray["message"] = "Dit bericht dient als test"; 
$inboxArray["date"] = date("d-m-Y h:i:s"); 
$apnspayload['aps'] = array ('alert' => $message,'badge' => $badge,'sound' => 'default', 'inbox' => $inboxArray); 

$payload = json_encode($apnspayload); 

$tokens = array(); 
$tokens[] = "********** ** * * *"; 

foreach($tokens as $tokenId){ 


    $apnsMessage = chr(1) . pack('N', time()) . pack('N', time() + 86400) . chr(0) . chr(32) 
     . pack('H*', str_replace(' ', '', $tokenId)) . chr(0) . chr(strlen($payload)) . $payload; 

    $streamContext = stream_context_create(); 

    stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert); 
    stream_context_set_option($streamContext, 'ssl', 'passphrase', $passPhrase); 

    $apns = stream_socket_client($sslUrl, $error, $errorString, 6, STREAM_CLIENT_CONNECT, $streamContext); 

    if($apns){ 
     $fwrite = fwrite($apns, $apnsMessage); 

     fclose($apns); 
     @socket_close($apns); 
    }else{ 
     echo 'request failed'; 
    } 
}` 
+0

となりました。この質問は、あなたのすべてのコンテキストでコールバックが発生するのを避ける方法を疑問視している最近の質問とはあまり関係がありません。あなたはこれを解決しましたか? http://stackoverflow.com/questions/14231470/titanium-mobile-apple-push-notifications-what-is-the-most-logical-place-to-ins –

+0

あなたが言及している質問は解決され、別の人が起きます。 JSONの解析で何か問題があるように思えました。 –

答えて

2

問題、

JSONで何かが間違っていたようで、まだ何がわかりません。

App.js: var data = JSON.parse(e.data);JSON.parse()を削除するとコードが機能しました。 何らかの理由でJSONデータを解析する必要はありませんでした。したがって、行はvar data = e.data;

+1

これは私のために働いた、ありがとう。 – LucasA

関連する問題