Сессия заканчивается после активности переключателя || Необходимо авторизоваться каждый раз, когда открывается приложение - PullRequest
0 голосов
/ 26 февраля 2020

Привет,

Я создаю приложение для Instagram, используя эту библиотеку. У меня две принципиальные проблемы:

  • Требуется входить в систему каждый раз, когда открывается приложение.
  • После входа в систему сеанс завершается при активности коммутатора.

И я не могу решить эту проблему, просто сохраняя учетные данные для входа, потому что Instagram этого не позволяет. Я нашел это в Политике платформы Instagram:

«Не сохранять и не кэшировать учетные данные для входа в Instagram».

У других людей была такая же проблема и создатель lib ответил this. Проблема в том, что я ничего не понимаю, и он ответил, используя Kotlin, я использую Java. Вот мой код:

Многоэкранный. java:

public class Multiscreen {

private Instagram4Android instagram;
private Context mContext;

public Multiscreen(Context mContext) {
    this.mContext = mContext;
}

public Observable<InstagramLoginResult> loginToIg(final String username, final String password) {

    Observable<InstagramLoginResult> observable = Observable.create(observableEmitter -> {

        instagram = Instagram4Android.builder().username(username).password(password).build();
        instagram.setup();
        observableEmitter.onNext(instagram.login());

    });



    return observable;

}

public Observable<InstagramUser> userInfo() {

    Observable<InstagramUser> observable = Observable.create(observableEmitter -> {

        InstagramSearchUsernameResult result = instagram.sendRequest(new InstagramSearchUsernameRequest(instagram.getUsername()));
        observableEmitter.onNext(result.getUser());

    });

    return observable;
}

public void isLoggedIn(){

    if (instagram == null){

        Toast.makeText(mContext, "null", Toast.LENGTH_SHORT).show();
    }

    else {

        Toast.makeText(mContext, "not null", Toast.LENGTH_SHORT).show();
    }
}}

LoginActivity:

public class LoginActivity extends AppCompatActivity {

private Toolbar toolbar;

private EditText text_username, text_password;
private Button loginBtn;

private ProgressDialog dialog;

Instagram4Android instagram = Instagram4Android.builder().build();

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

    dialog = new ProgressDialog(LoginActivity.this);
    dialog.setTitle("Logging in...");

    toolbar = findViewById(R.id.loginToolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setTitle("");

    text_username = findViewById(R.id.usernameInput);
    text_password = findViewById(R.id.passwordInput);
    loginBtn = findViewById(R.id.loginBtn);

    loginBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (text_username.length() > 0 || text_password.length() > 0){

                String username = text_username.getText().toString();
                String password = text_password.getText().toString();

                dialog.show();

                instagram = Instagram4Android.builder().username(username).password(password).build();
                attemptToLogin(username, password);
            }

            else {

                Toast.makeText(LoginActivity.this, "All fields are required.", Toast.LENGTH_SHORT).show();
            }
        }
    });
}

public void attemptToLogin(String username, String password){

    Multiscreen multiscreen = new Multiscreen(getApplicationContext());
    multiscreen.loginToIg(username, password)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(instagramLoginResult -> {

                if (instagramLoginResult.getStatus().equals("ok")){

                    dialog.dismiss();
                    startActivity(new Intent(LoginActivity.this, MainActivity.class));
                }

                else {

                    dialog.dismiss();
                }
            });
}

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    int id = item.getItemId();

    if (id == android.R.id.home){
        onBackPressed();
    }

    return super.onOptionsItemSelected(item);
}

@Override
public void onBackPressed(){

    super.onBackPressed();
}}

Не знаю, сможет ли кто-нибудь мне помочь, но Я устал от этого и думаю о том, чтобы отказаться от этого проекта. Если вы сможете решить хотя бы одну из этих проблем, я буду благодарен.

1 Ответ

0 голосов
/ 26 февраля 2020

Вы используете учетные данные Instagram на каждой странице?

Потому что, я думаю, вы не можете хранить учетные данные Instagram, но вы можете хранить один флаг в prefrence is_login true, и вы можете управлять им при каждой активности, а также при каждом открытии приложения

, и я думаю, это может решить вашу проблему, потому что во всех приложениях мы проверяем логин пользователя или нет, это зависит от предпочтения, которое хранится в кэше приложения

MyApp Class

        public class MyApp extends Application {

            private static MyApp app;
            public static Instagram instaObject;

            @Override
            public void onCreate() {
                super.onCreate();
                app = this;


            }

            public static MyApp getApp() {
                return app;
            }

         public static void setInstagramObject(Instagram instaObject) {
                this.instaObject = instaObject;
            }

     public static Instagram getInstagramObject() {
                return instaObject;
            }

        }

Определить класс MyApp в Android Манифест : -

<application
        android:name=".MyApp"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:usesCleartextTraffic="true"
        tools:ignore="GoogleAppIndexingWarning"
        tools:targetApi="m">
//all activities
</application>    

Активность при входе

    public void attemptToLogin(String username, String password){

        Multiscreen multiscreen = new Multiscreen(getApplicationContext());
        multiscreen.loginToIg(username, password)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(instagramLoginResult -> {

                    if (instagramLoginResult.getStatus().equals("ok")){

                        dialog.dismiss();
                        MyApp.setInstagramObject(instagramLoginResult);
                        startActivity(new Intent(LoginActivity.this, MainActivity.class));
                    }

                    else {

                        dialog.dismiss();
                    }
                });
    }

В каком аккаунте вы хотите использовать: -

Instagram instaObject = MyApp.getInstagramObject();
...