Не могу автоматически читать SMS, используя API-интерфейс SMS Retriever, когда приложение загружено в игровой магазин - PullRequest
2 голосов
/ 29 апреля 2019

Я использую SMS Retriever API для отправки и получения сообщений OTP. Когда я тестировал свое приложение в режиме выпуска и отладки, оно работает нормально и автоматически читает otp, но когда я загружаю свое приложение в игровой магазин, оно перестает работать. Я должен вручную ввести свой отп. Пожалуйста, просмотрите мой код, что я делаю не так.

Я сгенерировал хеш-код из 11 символов строки с помощью класса AppSignatureHashHelper и передал 11-значный код на сервер. Затем я читаю смс с помощью приемника Broadcast, анализирую otp из смс и отправляю обратно на сервер.

///////////////// Отправка номера телефона и hashKey на сервер ///////////////

phoneNo = phoneText.getText().toString();
            System.out.println( phoneNo );
            params.put( "mob_no", phoneNo );
            //String debugHashKey = "Yq%2BZIxNoG%2BK";
            //String releaseHashKey = "h9mVMD4POjg";
            String appSigningKey = "b4epgGrrtyp";
            params.put( "uniqueKey", releaseHashKey );
            asyncHttpClient.post( mob_validate, params, new JsonHttpResponseHandler() {
                @Override
                public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                    try {
                        System.out.println( "onSuccess" );
                        status = response.getString( "status" );
                        msg = response.getString( "msg" );
                        Toast.makeText( getApplicationContext(), msg, Toast.LENGTH_SHORT ).show();
                        if (status.equals( "success" )) {
                            Intent intent = new Intent( MainActivity.this, OTPConfirmationActivity.class );
                            intent.putExtra( "phone_no", phoneNo );
                            startActivity( intent );
                            finish();
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }

                @Override
                public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
                    //Toast.makeText( getApplicationContext(), R.string.onFailure, Toast.LENGTH_SHORT ).show();
                }

///////////////// Чтение смс с использованием широковещательного приемника и отправка обратно на сервер ////////////////////// //

params.put( "otp", otp );
            params.put( "mob_no", phoneNo );
            asyncHttpClient.post( verify_otp, params, new JsonHttpResponseHandler() {
                @Override
                public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                    try {
                        status = response.getString( "status" );
                        msg = response.getString( "msg" );
                        Toast.makeText( OTPConfirmationActivity.this, msg, Toast.LENGTH_SHORT ).show();
                        if (status.equals( "success" )) {
                            endTimer();
                            sharedPreferences.edit().putBoolean( "logged", true ).apply();
                            Intent intent = new Intent( getBaseContext(), HomeActivity.class );
                            startActivity( intent );
                            finish();
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }

                @Override
                public void onFailure(int statusCode, Header[] headers, Throwable throwable, JSONObject errorResponse) {
                    //Toast.makeText( getApplicationContext(), R.string.onFailure, Toast.LENGTH_SHORT ).show();
                }

//////////// Build.gradle file //////////////////////////

android {
    signingConfigs {
        release {
            storeFile file('/home/eazysoft/Documents/finalKey/releaseKey.jks')
            storePassword 'password'
            keyAlias = 'upload'
            keyPassword 'password'
        }
    }
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.eazysoft.lookAround"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 3
        versionName "1.0.2"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
        signingConfig signingConfigs.release
    }
    buildTypes {
        release {
            minifyEnabled true
            useProguard true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
            debuggable = true
        }

        debug {
            debuggable true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:support-v4:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:2.0.0-alpha4'
    testImplementation 'junit:junit:4.13-beta-2'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    implementation 'com.android.support:design:28.0.0'
    implementation 'com.android.support:multidex:1.0.3'
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation 'com.android.support:cardview-v7:28.0.0'
    implementation 'com.android.support:design:28.0.0'
    implementation 'com.android.support:exifinterface:28.0.0'

    implementation 'com.google.android.gms:play-services-maps:16.1.0'
    implementation 'com.google.android.gms:play-services-location:16.0.0'
    implementation 'com.google.android.gms:play-services-base:16.1.0'
    implementation 'com.google.android.gms:play-services-identity:16.0.0'
    implementation 'com.google.android.gms:play-services-auth:16.0.1'
    implementation 'com.google.android.gms:play-services-auth-api-phone:16.0.0'

    implementation 'com.loopj.android:android-async-http:1.4.9'
}

Пожалуйста, просмотрите мой код и помогите мне с настройкой в ​​магазине Google Play.

Решение: Я нашел решение своего вопроса, и это проблема конфигурации.

Шаг 1. После загрузки приложения в магазин Google Play Google сгенерировал два сертификата (подпись приложения). Сначала необходимо загрузить сертификат (ключ загрузки), который является сгенерированным ключом подписи приложения. Этот ключ используется для обновления или загрузки вашего приложения в магазин Google Play.

Второй - это сертификат подписи приложения, который используется, когда пользователь устанавливает ваше приложение из игрового магазина. Этот сертификат помогает нам создать еще один 11-значный код строки. Для этого сначала загрузите сертификат подписи приложения.

Шаг 2: Используйте свой Android Studio Terminal и вставьте этот фрагмент команды

keytool -importcert -alias myalias -file /home/Downloads/deployment_cert.der -keystore certificate.jks -storepass mypassword

Сохранить имя псевдонима и пароль, так как это только путь к файлу изменения

Шаг 3: После выполнения этой команды в одном сообщении будет показано «Доверять этому сертификату? [Нет]:», затем введите «y», после чего в другом сообщении появится «Сертификат был добавлен в хранилище ключей». Этот файл Certificate.jks хранится в вашем проекте или просто ищите этот файл.

Шаг 4. После создания файла certificate.jks сгенерируйте 11-значный хэш-код, используя следующую команду

keytool -exportcert -alias myalias -keystore /home/user/AndroidStudioProjects/LookAround/certificate.jks | xxd -p | tr -d "[:space:]" | echo -n com.root.lookAround `cat` | sha256sum | tr -d "[:space:]-" | xxd -r -p | base64 | cut -c1-11 

Оставьте псевдоним тем же, который вы указали при создании файла certificate.jks, т.е. myalias. Когда он попросит вас ввести пароль, введите «mypassword», и все готово. Отправьте этот 11-значный хэш-код на сервер и внедрите его в формате sms.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...