Я тестирую приложение на двух мобильных телефонах. У меня есть телефон 1, который отправляет проверочный код, который является действительным номером IMSI SIM-карты, и телефон 2 должен прочитать SMS с телефона 1. Если номер IMSI, который хранится в Firebase, совпадает с номером IMSI телефона 1, сообщение подтверждение будет отправлено обратно.
Ожидаемый результат: переменная imsi будет такой же в методе sendCode
и даже в onDataChange
.
public void sendCode(View view) {
final String phoneNumber = ccp.getFullNumberWithPlus();
SmsManager sms = SmsManager.getDefault();
List<String> messages = sms.divideMessage("Your IMSI code is: " + imsi);
Toast.makeText(getApplicationContext(), "Code has been sent to: " + phoneNumber + "." + " You shall be receiving the SMS shortly. ", Toast.LENGTH_LONG).show();
sendButton.setEnabled(false);
for (String msg : messages) {
PendingIntent sentIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_SENT"), 0);
PendingIntent deliveredIntent = PendingIntent.getBroadcast(this, 0, new Intent("SMS_DELIVERED"), 0);
sms.sendTextMessage(phoneNumber, null, msg, sentIntent, deliveredIntent);
String id = databasePhone.push().getKey();
PhoneandVerificationCode phone = new PhoneandVerificationCode(phoneNumber, imsi);
databasePhone.child(id).setValue(phone, imsi);
Snackbar sb = Snackbar.make(findViewById(android.R.id.content), "Phone successfully added to the database. ", Snackbar.LENGTH_LONG);
sb.show();
}
}
Ниже приведена часть, где я получаю сообщение и сравниваю его со значением Firebase:
public class ReceiveBroadcast extends BroadcastReceiver {
private static final String TAG = "MyBroadcastReceiver";
String body, number;
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if(bundle != null) {
Object[] obj=(Object[])bundle.get("pdus");
if(obj!=null){
for(int i=0; i<obj.length; i++){
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[])obj[i]);
body = smsMessage.getMessageBody().toString();
number = smsMessage.getOriginatingAddress().toString();
}
databasePhone.orderByKey().limitToLast(1).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot readphone : dataSnapshot.getChildren()) {
Log.v("tmz", "" + readphone.getKey()); //displays the key for the node
String lastphoneNumber = readphone.child("phoneNumber").getValue().toString();
String lastIMSINumber = readphone.child("code").getValue().toString();
//String lastIMSINumber= "278010401571570";
if(lastIMSINumber.equals(imsi)){
sendSMSBroadcast();
signoutButton.setEnabled(true);
statusText.setText("Signed in ");
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(number, null, "Verified " , null, null);
Toast.makeText(MainActivity.this, "Phone Number Retrieved "+ lastphoneNumber + " IMSI: " + lastIMSINumber, Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MainActivity.this, "Code not Verified. Incorrect IMSI. ", Toast.LENGTH_LONG).show();
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {}
});
}
}
}
}