#firebase-realtime-database #nativescript
#firebase-база данных в реальном времени #nativescript
Вопрос:
Я пытаюсь нажать на входящий вызов, используя следующую фоновую службу в NativeScript и выполняя поиск по входящему номеру в базе данных Firebase.
Код firebase.query
from nativescript-plugin-firebase
работает нормально, если пользовательский интерфейс приложения виден или свернут в Android, но когда приложение закрыто (однако служба работает в фоновом режиме), он выдает firebase.query: TypeError: Cannot read property 'child' of null
ошибку. Есть идея.
app/broadcastreceivers/NotificationEventReceiver.js:
var application = require("application");
var firebase = require("nativescript-plugin-firebase");
var incomingCallDetected = false;
var TelephonyManager = application.android.context.getSystemService(android.content.Context.TELEPHONY_SERVICE);
android.support.v4.content.WakefulBroadcastReceiver.extend("com.tns.broadcastreceivers.NotificationEventReceiver", {
onReceive: function (context, intent) {
if (intent.getAction() === 'android.intent.action.PHONE_STATE') {
incomingCallDetected = true;
}
}
});
var callStateListener = android.telephony.PhoneStateListener.extend({
onCallStateChanged: function (state, phoneNumber) {
if (incomingCallDetected amp;amp; state === 1) { // incoming call ringing
firebase.query(
function(result) {
console.log(JSON.stringify(result));
},
"/calls",
{
singleEvent: true,
orderBy: {
type: firebase.QueryOrderByType.CHILD,
value: 'PhoneNumber'
},
range: {
type: firebase.QueryRangeType.EQUAL_TO,
value: phoneNumber.replace(/s /g, '').substr(-10)
}
}
);
incomingCallDetected = false;
}
}
});
TelephonyManager.listen(new callStateListener(), android.telephony.PhoneStateListener.LISTEN_CALL_STATE);
Обновление: Эта строка в nativescript-plugin-firebase вызывает проблему, поскольку firebaseInstance не сохраняется в службе после закрытия приложения.
Ответ №1:
Я думаю, это потому, что firebase никогда не запускается в фоновой службе, я предполагаю, что вы делаете это только в коде приложения, поэтому оно работает, когда оно находится на переднем плане.