cuốn sách gpt4 ai đã làm

Đăng nhập Facebook/Đăng nhập Google - Hoạt động giống nhau?

In lại Tác giả: Taklimakan 更新时间:2023-11-03 01:02:28 27 4
mua khóa gpt4 Nike

我正在尝试为我的用户提供使用 Google 或 Facebook 登录的选项。到目前为止,我找到了一个实现 Google 登录流程的示例,但如果我可以在同一 Activity 中实现类似的 Facebook 登录流程,我感到很困惑。

有人知道如何处理登录吗?我正在考虑可能定义一个类来处理 Google/Facebook 的登录流程,也许只是检查应用程序启动时正在使用的是哪个。有任何想法吗?

public class MainActivity extends Activity implements ConnectionCallbacks,
OnConnectionFailedListener, OnClickListener, OnAccessRevokedListener {

private static final String TAG = "MainActivity";

// A magic number we will use to know that our sign-in error
// resolution activity has completed.
private static final int OUR_REQUEST_CODE = 49404;

// The core Google+ client.
private PlusClient mPlusClient;

// A flag to stop multiple dialogues appearing for the user.
private boolean mResolveOnFail;

// We can store the connection result from a failed connect()
// attempt in order to make the application feel a bit more
// responsive for the user.
private ConnectionResult mConnectionResult;

// A progress dialog to display when the user is connecting in
// case there is a delay in any of the dialogs being ready.
private ProgressDialog mConnectionProgressDialog;

@Ghi đè
khoảng trống được bảo vệ trênCreate(Gói đã lưuInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// We pass through this for all three arguments, specifying the:
// 1. Context
// 2. Object to call onConnected and onDisconnected on
// 3. Object to call onConnectionFailed on
mPlusClient = new PlusClient.Builder(this, this, this)
.setVisibleActivities("http://schemas.google.com/BuyActivity")
.xây dựng();

// We use mResolveOnFail as a flag to say whether we should trigger
// the resolution of a connectionFailed ConnectionResult.
mResolveOnFail = false;

// Connect our sign in, sign out and disconnect buttons.
findViewById(R.id.sign_in_button).setOnClickListener(this);
findViewById(R.id.sign_out_button).setOnClickListener(this);
findViewById(R.id.sign_out_button).setVisibility(View.GONE);
findViewById(R.id.authButton).setOnClickListener(this);

// Configure the ProgressDialog that will be shown if there is a
// delay in presenting the user with the next sign in step.
mConnectionProgressDialog = new ProgressDialog(this);
mConnectionProgressDialog.setMessage("Signing in...");
}

@Ghi đè
khoảng trống được bảo vệ trênStart() {
super.onStart();
Log.v(TAG, "Start");
// Every time we start we want to try to connect. If it
// succeeds we'll get an onConnected() callback. If it
// fails we'll get onConnectionFailed(), with a result!
mPlusClient.connect();
}

@Ghi đè
khoảng trống được bảo vệ onStop() {
super.onStop();
Log.v(TAG, "Stop");
// It can be a little costly to keep the connection open
// to Google Play Services, so each time our activity is
// stopped we should disconnect.
mPlusClient.disconnect();
}

@Ghi đè
public void onConnectionFailed(ConnectionResult result) {
Log.v(TAG, "ConnectionFailed");
// Most of the time, the connection will fail with a
// user resolvable result. We can store that in our
// mConnectionResult property ready for to be used
// when the user clicks the sign-in button.
if (result.hasResolution()) {
mConnectionResult = result;
if (mResolveOnFail) {
// This is a local helper function that starts
// the resolution of the problem, which may be
// showing the user an account chooser or similar.
startResolution();
}
}
}

@Ghi đè
public void onConnected(Bundle bundle) {
// Yay! We can get the oAuth 2.0 access token we are using.
Log.v(TAG, "Connected. Yay!");

// Turn off the flag, so if the user signs out they'll have to
// tap to sign in again.
mResolveOnFail = false;

// Hide the progress dialog if its showing.
mConnectionProgressDialog.dismiss();

// Hide the sign in button, show the sign out buttons.
findViewById(R.id.sign_in_button).setVisibility(View.GONE);
findViewById(R.id.sign_out_button).setVisibility(View.VISIBLE);

// Retrieve the oAuth 2.0 access token.
final Context context = this.getApplicationContext();
AsyncTask task = new AsyncTask() {
@Ghi đè
Đối tượng được bảo vệ doInBackground(Object... params) {
String scope = "oauth2:" + Scopes.PLUS_LOGIN;
thử {
// We can retrieve the token to check via
// tokeninfo or to pass to a service-side
// application.
String token = GoogleAuthUtil.getToken(context,
mPlusClient.getAccountName(), scope);
} catch (UserRecoverableAuthException e) {
// This error is recoverable, so we could fix this
// by displaying the intent to the user.
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (GoogleAuthException e) {
e.printStackTrace();
}
return null;
}
};
task.execute((Void) null);

// THIS IS TO CONNECT TO NAVI ACTIVITY AFTER YOU CONNECT Also makes it
// so you cannot go back to main activity
/*
* if (mPlusClient.isConnected()) { Intent intent = new Intent(this,
* NaviActivity.class); startActivity(intent); } finish();
*/
}

@Ghi đè
public void onDisconnected() {
// Bye!
Log.v(TAG, "Disconnected. Bye!");
}

protected void onActivityResult(int requestCode, int responseCode,
Intent intent) {
Log.v(TAG, "ActivityResult: " + requestCode);
if (requestCode == OUR_REQUEST_CODE && responseCode == RESULT_OK) {
// If we have a successful result, we will want to be able to
// resolve any further errors, so turn on resolution with our
// flag.
mResolveOnFail = true;
// If we have a successful result, lets call connect() again. If
// there are any more errors to resolve we'll get our
// onConnectionFailed, but if not, we'll get onConnected.
mPlusClient.connect();
} else if (requestCode == OUR_REQUEST_CODE && responseCode != RESULT_OK) {
// If we've got an error we can't resolve, we're no
// longer in the midst of signing in, so we can stop
// the progress spinner.
mConnectionProgressDialog.dismiss();
}
}

@Ghi đè
public void onClick(Xem chế độ xem) {
chuyển đổi (view.getId()) {
trường hợp R.id.sign_in_button:
Log.v(TAG, "Tapped sign in");
if (!mPlusClient.isConnected()) {
// Show the dialog as we are now signing in.
mConnectionProgressDialog.show();
// Make sure that we will start the resolution (e.g. fire the
// intent and pop up a dialog for the user) for any errors
// that come in.
mResolveOnFail = true;
// We should always have a connection result ready to resolve,
// so we can start that process.
if (mConnectionResult != null) {
startResolution();
} khác {
// If we don't have one though, we can start connect in
// order to retrieve one.
mPlusClient.connect();
}
}
phá vỡ;

case R.id.sign_out_button:
Log.v(TAG, "Tapped sign out");
// We only want to sign out if we're connected.
if (mPlusClient.isConnected()) {
// Clear the default account in order to allow the user
// to potentially choose a different account from the
// account chooser.
mPlusClient.clearDefaultAccount();

// Disconnect from Google Play Services, then reconnect in
// order to restart the process from scratch.
mPlusClient.disconnect();
mPlusClient.connect();

// Hide the sign out buttons, show the sign in button.
findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
findViewById(R.id.sign_out_button).setVisibility(View.GONE);

}
phá vỡ;

// THIS SHOULD NOT BE NEEDED, MUST SWITCH ACTIVITIES UPON AUTHORIZATION
case R.id.authButton:
Log.v(TAG, "Switch Activities");

if (mPlusClient.isConnected()) {
Intent intent = new Intent(view.getContext(),
NaviActivity.class);
view.getContext().startActivity(intent);

}
phá vỡ;

default:
// Unknown id.
}
}

@Ghi đè
public void onAccessRevoked(ConnectionResult status) {
// mPlusClient is now disconnected and access has been revoked.
// We should now delete any data we need to comply with the
// developer properties. To reset ourselves to the original state,
// we should now connect again. We don't have to disconnect as that
// happens as part of the call.
mPlusClient.connect();

// Hide the sign out buttons, show the sign in button.
findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
findViewById(R.id.sign_out_button).setVisibility(View.GONE);
}

/**
* A helper method to flip the mResolveOnFail flag and start the resolution
* of the ConnenctionResult from the failed connect() call.
*/
private void startResolution() {
thử {
// Don't start another resolution now until we have a
// result from the activity we're about to start.
mResolveOnFail = false;
// If we can resolve the error, then call start resolution
// and pass it an integer tag we can use to track. This means
// that when we get the onActivityResult callback we'll know
// its from being started here.
mConnectionResult.startResolutionForResult(this, OUR_REQUEST_CODE);
} catch (SendIntentException e) {
// Nếu có vấn đề gì, bạn chỉ cần thử kết nối() lại để chúng ta có một kết nối mới
// Kết quả kết nối.
mPlusClient.connect();
}
}
}

câu trả lời hay nhất

Thiết lập hai đoạn (facebook và google) trong bố cục bạn sử dụng để đăng nhập và một đoạn trong bố cục khác để nhận phiên xác thực

<>
android:id="@+id/authButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_rabity="center_horizontal"
android:layout_marginTop="30dp" />

<>
android:id="@+id/sign_in_button"
android:layout_below="@id/authButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

Sau đó sử dụng tất cả các chức năng mà mỗi chức năng cần

lớp công khai MainActivity mở rộng Hoạt động triển khai ConnectionCallbacks,OnConnectionFailedListener {
//google
PlusClient plusClient riêng tư;
SignInButton riêng tư btnSignIn;
kết nối ProgressDialog riêng tưProgressDialog;
kết nối Kết nối riêng Kết quả kết nối;
int tĩnh cuối cùng riêng tư REQUEST_CODE_RESOLVE_ERR = 9000;
//khuôn mặt
Nút đăng nhập riêng tưĐăng nhậpĐăng xuất;
riêng UiLifecycleHelper uiHelper;
ứng dụng sử dụng tĩnh;
Chuỗi tĩnh urldelogin="algo";
riêng Session.StatusCallback gọi lại = Session.StatusCallback() mới
@Ghi đè
cuộc gọi void công khai (Phiên phiên, trạng thái SessionState, Ngoại lệ) {
onSessionStateChange(phiên, trạng thái, ngoại lệ);
if (session.isOpened()) {
Log.e("usuario", "si hay sesion");
// gửi yêu cầu tới API /me
Yêu cầu.newMeRequest (phiên, Yêu cầu mới.GraphUserCallback() {

// gọi lại sau phản hồi của API Đồ thị với đối tượng người dùng
@Ghi đè
public void onCompleted(Người dùng GraphUser, Phản hồi phản hồi) {
nếu (người dùng != null) {
Log.e("usuario", "si hay usuario");
buildUserInfoDisplay(người dùng);
// bắt đầu một hoạt động khác
}
}
}).executeAsync();
}
}

khoảng trống riêng tư trênSessionStateChange(Phiên phiên, trạng thái SessionState,
Ngoại lệ ngoại lệ) {
// TODO sơ khai phương thức được tạo tự động
}
};


@Ghi đè
khoảng trống công khai trênResume() {
super.onResume();
uiHelper.onResume();
}

@Ghi đè
khoảng trống công khai trênPause() {
super.onPause();
uiHelper.onPause();
}

@Ghi đè
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_RESOLVE_ERR &&
Mã kết quả == RESULT_OK)
{
kết nốiResult = null;
plusClient.connect();
}
}

@Ghi đè
khoảng trống công khai trênDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}


@Ghi đè
khoảng trống được bảo vệ trênSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
uiHelper.onSaveInstanceState(outState);
}
public static void buildUserInfoDisplay(GraphUser user) {

appusuario=Usuario mới(user.getName(),user.getUsername());
}

@Ghi đè
khoảng trống được bảo vệ trênCreate(Gói đã lưuInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
uiHelper = new UiLifecycleHelper(this, callback);
uiHelper.onCreate(savedInstanceState);
nútLoginLogout = (LoginButton)findViewById(R.id.authButton);
nútLoginLogout.setReadPermissions(Arrays.asList("user_status"));

btnSignIn = (SignInButton)findViewById(R.id.sign_in_button);
nútLoginLogout.setVisibility(View.VISIBLE);
btnSignIn.setVisibility(View.VISIBLE);
plusClient = new PlusClient.Builder(this, this, this).setActions("http://schemas.google.com/AddActivity", "http://schemas.google.com/BuyActivity")
.xây dựng();

ConnectionProgressDialog = new ProgressDialog(this);
ConnectionProgressDialog.setMessage("Conectando...");

btnSignIn.setOnClickListener(OnClickListener mới() {

@Ghi đè
public void onClick(Xem chế độ xem)
{
if (!plusClient.isConnected())
{
if (kết nốiResult == null)
{
ConnectionProgressDialog.show();
}
khác
{
thử
{
ConnectionResult.startResolutionForResult(
MainActivity.this,
REQUEST_CODE_RESOLVE_ERR);
}
bắt (SendIntentException e)
{
kết nốiResult = null;
plusClient.connect();
}
}
}
}
});


}

@Ghi đè
khoảng trống được bảo vệ trênStart()
{
super.onStart();
plusClient.connect();
}

@Ghi đè
khoảng trống được bảo vệ onStop()
{
super.onStop();
plusClient.disconnect();
}


@Ghi đè
boolean công khai onCreateOptionsMenu(Menu Menu) {
// Phóng to menu; thao tác này sẽ thêm các mục vào thanh hành động nếu có.
getMenuInflater().inflate(R.menu.main, menu);
trả về đúng sự thật;

}

@Ghi đè
khoảng trống công khai trênConnected(Gói kết nốiGợi ý)
{
ConnectionProgressDialog.dismiss();
// danh nghĩa
Chuỗi accountName = plusClient.getAccountName();
//cuenta con mail
Người tài khoảnperson=plusClient.getCurrentPerson();
Chuỗi tên người = accountperson.getDisplayName();
Log.e("Google +", "Conectado");
// bắt đầu một hoạt động khác

}

@Ghi đè
khoảng trống công khai trênDisconnected()
{
Log.e("Google +", "Desconectado");
}

@Ghi đè
public void onConnectionFailed(ConnectionResult result) {
// TODO sơ khai phương thức được tạo tự động
if (connectionProgressDialog.isShowing())
{
if (result.hasResolution())
{
thử
{
result.startResolutionForResult(cái này,
REQUEST_CODE_RESOLVE_ERR);
}
bắt (SendIntentException e)
{
plusClient.connect();
}
}
}
kết nốiResult = kết quả;

}
}

Đặt chức năng tương tự vào Hoạt động mới để xác thực phiên và sử dụng

if (session.isOpened()) { }

Ẩn nút đăng nhập Google hoặc

 khoảng trống công khai trênConnected(Gói kết nốiGợi ý)
{

}

Ẩn nút đăng nhập facebook

Về java - đăng nhập Facebook/đăng nhập Google - cùng một Hoạt động? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/18939099/

27 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress