2014-10-03 2 views
1

Titanium SDK версии 3.4.0.GA Таргетинг Android SDK: 20Titanium - Android - Push Notifications фаил Когда приложение не Foreground

Debugging на устройстве под управлением Android 4.4.4

могу получить deviceToken и может получать push-уведомления.

Но уведомления толчка появляется как предупреждение только тогда, когда приложение имеет фокус

Когда приложение не имеет фокус, я получаю сообщение об ошибке: приложение перестало работать.

Иногда приведение приложения в фокус показывает уведомления, отправленные, когда приложение не было в фокусе.

Как начать отлаживать это, пожалуйста?

Немного запотели - любые указатели было бы большим подспорьем

Большое спасибо

Айер

// this sets the background color of the master UIView (when there are no windows/tab groups on it) 
Titanium.UI.setBackgroundColor('#000'); 
var df = require("./dreamfactory"); 
var promise = require("./Promise"); 

var winMain = Ti.UI.createWindow({ 
     backgroundColor:"#000", 
     layout: "vertical" 
}); 

var CloudPush = require('ti.cloudpush'); 
var deviceTokenLabel = Ti.UI.createLabel({ 
    top: '10dp', width: '320dp', height: (CloudPush.pushType=='gcm'?'150dp':'40dp'), 
    font: { fontSize:14}, color: 'white', 
    text: 'Device Token' 
}); 
winMain.add(deviceTokenLabel); 

var deviceToken = Ti.App.Properties.getString("deviceToken", ""); 
if (deviceToken == "") { 
    CloudPush.retrieveDeviceToken({ 
     success: deviceTokenSuccess, 
     error: deviceTokenError 
    }); 
} else { 
     deviceTokenLabel.text = 'Already Had Device Token:' + deviceToken; 
     registerWithDSP(); 
} 

function deviceTokenSuccess(e) { 
    Ti.API.info('Device Token: ' + e.deviceToken); 
    deviceTokenLabel.text = 'Device Token:' + e.deviceToken; 
    Ti.App.Properties.setString('deviceToken', e.deviceToken); 
    registerWithDSP();  
    //enablePush.enabled = true; 
} 

function registerWithDSP() { 
    var body = {email:"[email protected]" , password : "yeggikallie"}; 
    body = JSON.stringify(body); 
    Ti.API.info(body);  
    df.makeRequest("post","/user/session", body).then(function(response) { 
     SESSION_ID = response.session_id; 
     Ti.API.info("session id " + SESSION_ID); 
    }, function(error){ 
      Ti.API.info("Could not connect " + error); 
    }); 

} 
function deviceTokenError(e) { 
    alert('Failed to register for push! ' + e.error); 
    deviceTokenLabel.text = 'Failed to get device token.'; 
} 

CloudPush.addEventListener('callback', function (evt) { 
    alert(evt.payload); 
}); 

CloudPush.addEventListener('trayClickLaunchedApp', function (evt) { 
    Ti.API.info('Tray Click Launched App (app was not running)'); 
}); 

CloudPush.addEventListener('trayClickFocusedApp', function (evt) { 
    Ti.API.info('Tray Click Focused App (app was already running)'); 
}); 

winMain.open(); 
+0

Какой модуль вы использовали? некоторый код также будет полезен. – developer82

+0

Привет! Спасибо за ваш ответ. Вот полный код app.js –

ответ

0

В зависимости от того, как вы отправляете свои уведомления толчка, он может быть уродливый полезной нагрузки (это была моя проблема). Я использую PHP и мой код ниже:

$data = array(
    'title' => 'Your App Title', 
    'sound' => 'default', 
    'alert' => 'Your message here', 
    'vibrate' => true); 

$fields = array(
    'registration_ids' => array('YOUR DEVICE TOKEN']), 
    'data'    => array('payload'=> array('android' => $data)), 
    'aps'    => $data); 

$headers = array( 
     'Authorization: key=' . 'YOUR API KEY', 
     'Content-Type: application/json' 
    ); 

// Open connection 
$ch = curl_init(); 

// Set the url, number of POST vars, POST data 
curl_setopt($ch, CURLOPT_URL, 'https://android.googleapis.com/gcm/send'); 

curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

// Execute post 
$result = curl_exec($ch); 

// Close connection 
curl_close($ch); 
+0

Пожалуйста, не добавляйте * «Я тоже» * в качестве ответов. На самом деле это не дает ответа на вопрос. Если у вас есть другой, но связанный с ним вопрос, тогда [ask] (// stackoverflow.com/questions/ask) он (ссылается на этот, если это поможет обеспечить контекст). Если вас интересует этот конкретный вопрос, вы можете [upvote] (// stackoverflow.com/help/privileges/vote-up), оставьте [комментарий] (// stackoverflow.com/help/privileges/comment) , или запустите [bounty] (// stackoverflow.com/help/privileges/set-bounties), когда у вас будет достаточно [репутации] (// stackoverflow.com/help/whats-reputation). – Machavity

+0

Это не отвечает на вопрос. Если у вас есть другой вопрос, вы можете задать его, нажав [Ask Question] (https://stackoverflow.com/questions/ask). Вы также можете [добавить щедрость] (https://stackoverflow.com/help/privileges/set-bounties), чтобы привлечь больше внимания к этому вопросу, как только у вас будет достаточно [репутации] (https://stackoverflow.com/help/ Что-репутация). - [Из обзора] (/ review/low-quality-posts/17077939) – thanksd

Смежные вопросы