В данный момент мой код работает так: если я отправляю смс, он передает сигнал о том, что смс был отправлен.
Что код не делает в данный момент: если я установил свой телефон в режиме полета, но у меня все еще есть соединение Wi-Fi (я отправлю смс-информацию - номер и текст - через вызов firebase),он все еще передает, что смс был отправлен, но мой телефон на самом деле не смог доставить его. Для этого случая я хотел бы зарегистрировать тот факт, что это действительно не помогло, и объяснить, что причиной было отсутствие обслуживания (сигнала).
import { Component, OnInit } from "@angular/core";
import * as firebase from 'nativescript-plugin-firebase';
import * as utils from "tns-core-modules/utils/utils";
import * as app from "tns-core-modules/application";
import * as permissions from "nativescript-permissions";
declare var android;
@Component({
selector: "ns-app",
templateUrl: "app.component.html"
})
export class AppComponent implements OnInit {
context = utils.ad.getApplicationContext();
sent = 'messageSent';
constructor(){}
ngOnInit(): void {
permissions.requestPermissions([android.Manifest.permission.SEND_SMS], "SMS Permission")
.then(() => {
console.log("Permission Granted");
})
.catch(() => {
console.log("Permission is not allowed");
});
firebase.init({
showNotifications: true,
showNotificationsWhenInForeground: true,
onPushTokenReceivedCallback: (token) => {
console.log('[Firebase] onPushTokenReceivedCallback:', { token });
},
onMessageReceivedCallback: (message: firebase.Message) => {
console.log('[Firebase] onMessageReceivedCallback:', { message });
this.sendMessage(message["data"]["number"], message["data"]["text"]);
}
})
.then(() => {
console.log('[Firebase] Initialized');
})
.catch(error => {
console.log('[Firebase] Initialize', { error });
});
}
sendMessage(numbers, textbody) {
let pendingIntentSent = this.pendingIntent(this.sent);
let sms = android.telephony.SmsManager.getDefault();
sms.sendTextMessage(numbers, null, textbody, pendingIntentSent, null);
this.broadcastReciever(this.sent, () => {
console.log(this.sent);
app.android.unregisterBroadcastReceiver(this.sent);
return;
})
}
broadcastReciever(id, cb) {
app.android.registerBroadcastReceiver(id, () => {
cb();
});
}
pendingIntent(id) {
let intent = new android.content.Intent(id);
return android.app.PendingIntent.getBroadcast(this.context, 0, intent, 0);
}
}