要实现Android短信验证API,可以按照以下步骤进行操作:
build.gradle
文件中添加以下依赖项:implementation 'com.google.android.gms:play-services-auth:19.2.0'
implementation 'com.google.android.gms:play-services-auth-api-phone:19.2.0'
AndroidManifest.xml
文件中添加以下权限:
Activity
文件中添加以下代码:import android.app.PendingIntent;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.auth.api.phone.SmsRetriever;
import com.google.android.gms.auth.api.phone.SmsRetrieverClient;
import com.google.android.gms.auth.api.phone.SmsRetrieverStatusCodes;
import com.google.android.gms.common.api.CommonStatusCodes;
import com.google.android.gms.common.api.Status;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "SMSVerification";
private static final int SMS_CONSENT_REQUEST = 2;
private EditText etPhoneNumber;
private Button btnVerify;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
etPhoneNumber = findViewById(R.id.etPhoneNumber);
btnVerify = findViewById(R.id.btnVerify);
btnVerify.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (etPhoneNumber.getText().toString().isEmpty()) {
Toast.makeText(MainActivity.this, "Please enter phone number", Toast.LENGTH_SHORT).show();
} else {
startSmsUserConsent();
}
}
});
}
private void startSmsUserConsent() {
SmsRetrieverClient client = SmsRetriever.getClient(this);
client.startSmsUserConsent(null)
.addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(Void aVoid) {
// SMS consent request successfully sent
// Start SMS listener to listen for incoming SMS
startSmsListener();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Failed to start SMS user consent
Log.e(TAG, "startSmsUserConsent:failure", e);
Toast.makeText(MainActivity.this, "Failed to start SMS user consent", Toast.LENGTH_SHORT).show();
}
});
}
private void startSmsListener() {
SmsBroadcastReceiver receiver = new SmsBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION);
registerReceiver(receiver, intentFilter);
SmsRetrieverClient client = SmsRetriever.getClient(this);
Task task = client.startSmsRetriever();
task.addOnSuccessListener(new OnSuccessListener() {
@Override
public void onSuccess(Void aVoid) {
// SMS retrieval successfully started
}
});
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Failed to start SMS retrieval
Log.e(TAG, "startSmsRetriever:failure", e);
Toast.makeText(MainActivity.this, "Failed to start SMS retrieval", Toast.LENGTH_SHORT).show();
}
});
}
private void processSmsMessage(String message) {
// Extract verification code from SMS message
// You can use regular expressions or other methods to extract the code
// For example, if the code is in the format "Your verification code is: 123456"
// You can use message.substring(message.lastIndexOf(" ") + 1) to get the code
// TODO: Handle the verification code
Log.d(TAG, "Verification code: " + message);
Toast.makeText(this, "Verification code: " + message, Toast.LENGTH_SHORT).show();
}
private void showSmsError() {
Toast.makeText(this, "Failed to retrieve SMS", Toast.LENGTH_SHORT).show();
}
private class SmsBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (SmsRetriever.SMS_RETRIEVED_ACTION.equals(intent.getAction())) {
Bundle extras = intent.getExtras();
Status status = (
上一篇:Android短信权限声明表格