Я разрабатываю мобильное приложение для мобильных устройств на BlueMix. Я только что добавил необходимые инструменты, следуя инструкциям here.IBMCloudCodeHybrid SDK всегда идет в onFailure на Android
сервер Node.js код (зависимости и переменная ibmconfig правильно установлен):
app.get(ibmconfig.getContextRoot() + '/hello', function(req,res){
res.send('World');
});
Гибридного мобильный код приложения:
var setup = {
applicationId:'<applicationId>',
applicationRoute:'<applicationRoute>',
applicationSecret:'<applicationSecret>'
};
IBMBluemix.initialize(setup).then(function(config){
return IBMCloudCode.initializeService();
}).then(function(cloudcode){
cloudcode.get("/hello").then(function(data){
alert(data);
}, function(err){
alert("[ERROR] " + err);
});
});
Извините за удаление NONE необходимых вещей. Моя проблема в том, что этот код фактически работает на устройствах iOS, но не на Android. Значение для iOS я получаю предупреждение World
, но для Android я получаю предупреждение [ERROR] "{\"code\":200,\"data\":\"World\"}"
. И что бы я ни пытался сделать (например, настраивая заголовок типа содержимого), я всегда перехожу к функции onFailure на устройствах Android.
То, что я узнал, что ответ сервера на Android понимается как строка и не JSON, поэтому я изменил IBMCloudCodeHybrid.js: линия 687 и добавил
if (response.constructor === 'abc'.constructor) {
response = JSON.parse(response);
}
if (_.has(response, "code") && _.has(response, "data") && response.code === 200) {
response = response.data;
} else {
defer.reject(response);
}
так, что всякий раз, когда строка получена , он будет преобразован в JSON.
И это сработало для меня.
Итак, мои вопросы: нужно ли мне это сделать, чтобы заставить его работать на Android? Или есть правильный способ сделать это/я делаю что-то неправильно? Или что-то не так с SDK Bluemix?