Привет,
Я создаю приложение для 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();
}}
Не знаю, сможет ли кто-нибудь мне помочь, но Я устал от этого и думаю о том, чтобы отказаться от этого проекта. Если вы сможете решить хотя бы одну из этих проблем, я буду благодарен.