Hi,
我正在使用这库为Instagram开发一个应用程序。我有两个主要问题:
我不能只保存登录凭证就能解决这个问题,因为Instagram不允许这样做。我在Instagram平台策略中发现了这个:
“不要存储或缓存Instagram登录凭据”,
其他人也有同样的问题,库创建者回答了这。,问题是我什么也不懂,他用Kotlin回答,我使用Java。这里是我的代码:
Multiscreen.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();
}}我不知道是否有人能帮我,但我对此感到厌倦,我正在考虑放弃这个项目。如果你能至少解决其中一个问题,我将非常感激。
发布于 2020-02-26 06:21:50
你在每一页上都使用instagram凭证?
因为我认为您不能存储instagram凭据,但是您可以在prefrence is_login true中存储一个标志,您可以管理每个活动,也可以在每次应用程序打开时管理它。
我认为这可以解决您的问题,因为在所有的应用程序中,我们正在检查用户登录与否取决于存储在app缓存中的优先级。
MyApp类
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;
}
}在Android清单中定义MyApp类:-
<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();
}
});
}您想使用的Acvitity :-
Instagram instaObject = MyApp.getInstagramObject();https://stackoverflow.com/questions/60407363
复制相似问题