2013-01-08 16 views
5

मैंने डेवलपर फोरम पर भी इस सवाल से पूछा, लेकिन जैसे ही मेरा समय समाप्त हो रहा है, मुझे आशा है कि स्टैक ओवरफ्लो पर पोस्टिंग तेज हो सकती है।टाइटेनियम मोबाइल पुश नोटिफिकेशन कॉलबैक नहीं

वर्तमान में मैं पुश नोटिफिकेशन प्राप्त करने में सक्षम हूं और मैं चारों ओर खोज करने के बाद कुछ अतिरिक्त डेटा भेजना चाहता हूं, मैंने निष्कर्ष निकाला कि यह संभव होना चाहिए। विचार है कि उपयोगकर्ताओं को इनबॉक्स (ऐप में) से संदेशों को सेट करना है जब पुश अधिसूचना निकाल दी जाती है, इसलिए उपयोगकर्ताओं को एक पुश अधिसूचना मिलती है जो "नया संदेश" कहती है और इसके साथ ही संदेश एक अलग कुंजी में भेजता है पुश नोटिफिकेशन callback फ़ंक्शन को कॉल करते समय Applications.Properties में सहेजा जाना चाहिए।

हालांकि, callback फ़ंक्शन कभी ट्रिगर नहीं होता है। अधिसूचनाएं भेजी जाती हैं, बैज सेट किया जाता है कि मेरी PHP स्क्रिप्ट क्या करता है संदेश है। यह जांचने के लिए कि क्या कॉलबैक ट्रिगर किया गया था, मैंने बैज और संदेश को हार्डकोडेड मानों में बदल दिया (नीचे देखें), मुझे यह कोड मुख्य रूप से आईओएस मुन्चर से मिला है, लेकिन मुझे लगता है कि 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- मोबाइल-apple-push-notifications-what-is-the-most-logical-place-to-ins –

+0

आपके द्वारा उल्लिखित प्रश्न हल किया गया है और एक अलग व्यक्ति उग आया है। ऐसा लगता है कि जेएसओएन पार्सिंग में कुछ गड़बड़ है। –

उत्तर

2

समस्या हल,

यह JSON के साथ कुछ गलत हो गया लगता है, अभी भी यकीन नहीं है कि क्या।

App.js में: var data = JSON.parse(e.data);JSON.parse() कोड को निकालने पर। किसी कारण से JSON डेटा को पार्स करने की आवश्यकता नहीं थी .. इस प्रकार लाइन var data = e.data;

+1

यह मेरे लिए धन्यवाद, धन्यवाद। – LucasA

संबंधित मुद्दे