Android 在SMS Retriever API中在何处使用11位生成的哈希键?
我已经在服务器和android端设置了所有东西。我的流程运行良好。我也生成了hashkey,但现在不知道在哪里使用它 注意:我删除了接收短信的权限,现在侦听器没有呼叫 代码:Android 在SMS Retriever API中在何处使用11位生成的哈希键?,android,Android,我已经在服务器和android端设置了所有东西。我的流程运行良好。我也生成了hashkey,但现在不知道在哪里使用它 注意:我删除了接收短信的权限,现在侦听器没有呼叫 代码: private void startSMSListener(){ 试一试{ smsReceiver=新的smsReceiver(); smsReceiver.setOTPListener(本); IntentFilter IntentFilter=新的IntentFilter(); intentFilter.addActi
private void startSMSListener(){
试一试{
smsReceiver=新的smsReceiver();
smsReceiver.setOTPListener(本);
IntentFilter IntentFilter=新的IntentFilter();
intentFilter.addAction(SmsRetriever.SMS\u retrieve\u ACTION);
此注册表接收程序(smsReceiver,intentFilter);
SmsRetrieverClient=SmsRetriever.getClient(此);
Task=client.startSmsRetriever();
task.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公开作废(作废避免){
//API已成功启动
}
});
task.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
//无法启动API
}
});
}捕获(例外e){
e、 printStackTrace();
}
}
更新:我没有得到OTP:
服务器端代码:
//Prepare Url
OkHttpClient client=new OkHttpClient();
Request request = new Request.Builder()
.url("http://msg.msgclub.net/rest/services/sendSMS/sendGroupSms?AUTH_KEY="+authKey+"&message=<#>You OTP is:"+randomPIN+"TthI79n9NvR&senderId=REMIND&routeId=1&mobileNos="+mobNo+"&smsContentType=english")
.get()
.addHeader("Cache-Control", "no-cache")
.build();
//准备Url
OkHttpClient=新的OkHttpClient();
Request Request=newrequest.Builder()
.url(“http://msg.msgclub.net/rest/services/sendSMS/sendGroupSms?AUTH_KEY=“+authKey+”&message=您的OTP是:“+randomPIN+”TthI79n9NvR&senderId=提醒&routeId=1&mobileNos=“+mobNo+”&smsContentType=english”)
.get()
.addHeader(“缓存控制”、“无缓存”)
.build();
我应该在OnReive方法中尝试哪种逻辑?谁能给我指路吗?
代码:
导入android.content.BroadcastReceiver;
导入android.content.Context;
导入android.content.Intent;
导入android.os.Bundle;
导入android.util.Log;
导入com.google.android.gms.auth.api.phone.SmsRetriever;
导入com.google.android.gms.common.api.CommonStatusCodes;
导入com.google.android.gms.common.api.Status;
导入com.tekitsolution.remently.Dialog.PaymentListDialog;
导入com.tekitsolution.remendly.Listener.SMSListener;
公共类SMSReceiver扩展了BroadcastReceiver{
私有静态最终字符串标记=SMSReceiver.class.getSimpleName();
私人SMSListener mListener;
/**
*@param-mListener
*/
公共无效设置程序(SMSListener mListener){
this.mListener=mListener;
}
/**
*@param上下文
*@param意图
*/
@凌驾
公共void onReceive(上下文、意图){
showLog(“内部短信接收器”);
if(SmsRetriever.SMS_RETRIEVED_ACTION.equals(intent.getAction())){
Bundle extras=intent.getExtras();
Status Status=(Status)extras.get(SmsRetriever.EXTRA_Status);
开关(status.getStatusCode()){
案例CommonStatusCodes.SUCCESS:
//这是完整的信息
String message=(String)extras.get(SmsRetriever.EXTRA\u SMS\u message);
显示日志(“消息:”+消息);
/*您的示例应用程序代码是:123ABC78
FA+9qCX9VSu*/
//提取OTP代码并发送给侦听器
if(mListener!=null){
mListener.onotprived(消息);
}
打破
案例CommonStatusCodes.API_未连接:
if(mListener!=null){
mListener.onOTPReceivedError(“API未连接”);
}
打破
案例CommonStatusCodes.NETWORK_错误:
if(mListener!=null){
mListener.onOTPReceivedError(“网络错误”);
}
打破
case CommonStatusCodes.ERROR:
if(mListener!=null){
mListener.onOTPReceivedError(“有些事情出了差错”);
}
打破
}
}
}
私有void showLog(字符串msg){
Log.d(标签、消息);
}
}
OTP活动:在onCreate内调用此方法:
private void startSMSListener() {
try {
smsReceiver = new SMSReceiver();
smsReceiver.setOTPListener(this);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(SmsRetriever.SMS_RETRIEVED_ACTION);
this.registerReceiver(smsReceiver, intentFilter);
SmsRetrieverClient client = SmsRetriever.getClient(this);
Task<Void> task = client.startSmsRetriever();
task.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
showLog("success");
}
});
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
showLog("failure");
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
private void startSMSListener(){
试一试{
smsReceiver=新的smsReceiver();
smsReceiver.setOTPListener(本);
IntentFilter IntentFilter=新的IntentFilter();
intentFilter.addAction(SmsRetriever.SMS\u retrieve\u ACTION);
此注册表接收程序(smsReceiver,intentFilter);
SmsRetrieverClient=SmsRetriever.getClient(此);
Task=client.startSmsRetriever();
task.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公开作废(作废避免){
showLog(“成功”);
}
});
task.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常e){
显示日志(“失败”);
}
});
}捕获(例外e){
e、 printStackTrace();
}
}
- 你的短信格式应该是
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import com.google.android.gms.auth.api.phone.SmsRetriever;
import com.google.android.gms.common.api.CommonStatusCodes;
import com.google.android.gms.common.api.Status;
import com.tekitsolution.remindly.Dialog.PaymentListDialog;
import com.tekitsolution.remindly.Listener.SMSListener;
public class SMSReceiver extends BroadcastReceiver {
private static final String TAG = SMSReceiver.class.getSimpleName();
private SMSListener mListener;
/**
* @param mListener
*/
public void setOTPListener(SMSListener mListener) {
this.mListener = mListener;
}
/**
* @param context
* @param intent
*/
@Override
public void onReceive(Context context, Intent intent) {
showLog("Inside SMS Receiver");
if (SmsRetriever.SMS_RETRIEVED_ACTION.equals(intent.getAction())) {
Bundle extras = intent.getExtras();
Status status = (Status) extras.get(SmsRetriever.EXTRA_STATUS);
switch (status.getStatusCode()) {
case CommonStatusCodes.SUCCESS:
//This is the full message
String message = (String) extras.get(SmsRetriever.EXTRA_SMS_MESSAGE);
showLog("message: "+ message);
/*<#> Your ExampleApp code is: 123ABC78
FA+9qCX9VSu*/
//Extract the OTP code and send to the listener
if (mListener != null) {
mListener.onOTPReceived(message);
}
break;
case CommonStatusCodes.API_NOT_CONNECTED:
if (mListener != null) {
mListener.onOTPReceivedError("API NOT CONNECTED");
}
break;
case CommonStatusCodes.NETWORK_ERROR:
if (mListener != null) {
mListener.onOTPReceivedError("NETWORK ERROR");
}
break;
case CommonStatusCodes.ERROR:
if (mListener != null) {
mListener.onOTPReceivedError("SOME THING WENT WRONG");
}
break;
}
}
}
private void showLog(String msg) {
Log.d(TAG, msg);
}
}
private void startSMSListener() {
try {
smsReceiver = new SMSReceiver();
smsReceiver.setOTPListener(this);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(SmsRetriever.SMS_RETRIEVED_ACTION);
this.registerReceiver(smsReceiver, intentFilter);
SmsRetrieverClient client = SmsRetriever.getClient(this);
Task<Void> task = client.startSmsRetriever();
task.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
showLog("success");
}
});
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
showLog("failure");
}
});
} catch (Exception e) {
e.printStackTrace();
}
}