Не получает содержимое SMS из API извлечения SMS, несмотря на то, что сообщение получено устройством - PullRequest
2 голосов
/ 19 апреля 2020

Я хочу использовать API-интерфейс SMS Retriever для автоматического получения кодов подтверждения, но я не получаю содержимое SMS от API.

Я использую эмулятор для тестирования, и SMS отправляется на устройство правильно, но моя программа не может получать и использовать его.

Мой SmsReceiver. java класс:

public class SmsReceiver extends BroadcastReceiver {

    private static final String TAG = "SmsReceiver";

    @Override public void onReceive(Context context, Intent intent) {
        if(intent == null)
        {
            return;
        }
        Log.e(TAG, "onReceive: ");
        if (SmsRetriever.SMS_RETRIEVED_ACTION.equals(intent.getAction())) {
            Bundle extras = intent.getExtras();
            Status mStatus = (Status) extras.get(SmsRetriever.EXTRA_STATUS);

            switch (mStatus.getStatusCode()) {
                case CommonStatusCodes.SUCCESS:
                    String message = (String) extras.get(SmsRetriever.EXTRA_SMS_MESSAGE);
                    Log.e(TAG, "onReceive: "+message);
                    break;
                case CommonStatusCodes.TIMEOUT:
                    Log.e(TAG, "onReceive: failure");
                    break;
            }
        }
    }
}

MainActivity. java класс

public class MainActivity extends AppCompatActivity{

    private final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        try {
            SmsReceiver smsReceiver = new SmsReceiver();
            IntentFilter filter = new IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION);
            ApplicationLoader.applicationContext.registerReceiver(smsReceiver, filter);

            SmsRetrieverClient client = SmsRetriever.getClient(ApplicationLoader.applicationContext);
            Task<Void> task = client.startSmsRetriever();
            task.addOnSuccessListener(new OnSuccessListener<Void>() {
                @Override
                public void onSuccess(Void aVoid) {
                    Toast.makeText(MainActivity.this, "Success", Toast.LENGTH_SHORT).show();
                }
            });
        }
        catch (Exception e)
        {
            Log.e(TAG, e.toString());
        }
    }
}

Манифест файл:

<application
    android:name=".ApplicationLoader"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <receiver
        android:name=".SmsReceiver"
        android:exported="true"
        android:permission="com.google.android.gms.auth.api.phone.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED"/>
        </intent-filter>
    </receiver>

</application>

Библиотеки Google:

    implementation 'com.google.android.gms:play-services-auth:17.0.0'
    implementation 'com.google.android.gms:play-services-auth-api-phone:17.0.0'

Мое SMS-сообщение:

    <#> Your verify code is: 12345

1 Ответ

1 голос
/ 21 апреля 2020

В вашем SMS-сообщении отсутствует строка ha sh: https://developers.google.com/identity/sms-retriever/verify#1_construct_a_verification_message

Вам необходимо указать код подтверждения и строку ha sh , См. здесь , чтобы узнать, как вычислить строку ha sh.

...