Я создаю приложение для глухих и слепых (они видят цвета на экране, но не видят деталей).Я хочу вибрировать умные часы и показывать определенный цвет всякий раз, когда кто-то звонит в дверь.Дверной звонок отправит через узел сообщение пользователю через Firebase через узел, см. Пример ниже:
import admin from 'firebase-admin';
// tslint:disable-next-line:no-var-requires
const serviceAccount = require('../../../firebase.json');
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: 'https://example.firebaseio.com',
});
export function sendMessageToUser(
token: string,
payload: { data: { color: string; vibration: string; text: string } },
priority: string,
) {
const options = {
priority,
timeToLive: 60 * 60 * 24,
};
return new Promise((resolve, reject) => {
admin
.messaging()
.sendToDevice(token, payload, options)
.then(response => {
console.log(response);
resolve(response);
})
.catch(error => {
console.log('error', error);
reject(error);
});
});
}
И умные часы получат сообщение firebase через следующую службу:
public class HapticsFirebaseMessagingService extends FirebaseMessagingService {
private SharedPreferences sharedPreferences;
@Override
public void onCreate() {
super.onCreate();
sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
}
@Override
public void onNewToken(String token) {
super.onNewToken(token);
sharedPreferences.edit().putString("fb", token).apply();
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
Map<String, String> data = remoteMessage.getData();
String color = data.get("color");
String vibration = data.get("vibration");
String text = data.get("text");
Intent dialogIntent = new Intent(this, AlarmActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Bundle bundle = new Bundle();
bundle.putString("color", color);
bundle.putString("vibration", vibration);
bundle.putString("text", text);
dialogIntent.putExtras(bundle);
startActivity(dialogIntent);
}
/**
* Get the token from the shared preferences.
*/
public static String getToken(Context context) {
return PreferenceManager.getDefaultSharedPreferences(context).getString("fb", "empty");
}
}
Это прекрасно работает, когда умные часы подключены к компьютеру, но когда я отключаю умные часы от компьютера, они работают в течение нескольких минут.Но через несколько минут onMessageReceived
не вызывается и не открывает деятельность.Почему де сервис больше не получает сообщения?И как мне это исправить, чтобы служба всегда получала сообщение.Сообщения всегда должны доставляться пользователям как можно быстрее, потому что они используются в качестве дверного звонка для глухих и слепых людей.