- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
我正在尝试为我的用户提供使用 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/
Tôi đang cố gắng cung cấp cho người dùng tùy chọn đăng nhập bằng Google hoặc Facebook. Cho đến nay tôi đã tìm thấy một ví dụ để triển khai luồng đăng nhập Google nhưng nếu tôi có thể triển khai Faceb tương tự trong cùng một Hoạt động
Tôi có một trang web nhạy cảm với việc người dùng có đăng nhập hay không. Tôi đang sử dụng SDK Javascript đăng nhập của Google. Khi người dùng truy cập trang này, tôi muốn hiển thị quảng cáo xen kẽ ("Đang tải...") và sau đó 1) hiển thị trang nếu người dùng đã đăng nhập
Tôi đã tạo một giọt bằng cách sử dụng digitalocean và cài đặt mariadb bằng lệnh apt install mariadb-server. Bây giờ tôi muốn kết nối với máy chủ của mình bằng php, tôi sử dụng cái này
Câu hỏi này đã có câu trả lời ở đây: Thiết lập Inno - Ký không thành công với "Công cụ đăng nhập không thành công với mã thoát 0x1" (2 câu trả lời) Đã đóng 3 năm trước.
Tôi đang cố triển khai đăng nhập google bằng API mới của họ: https://developers.google.com/identity/sign-in/web/ và đăng nhập và đăng xuất đang hoạt động tốt. Vấn đề của tôi là tôi không biết
Ứng dụng của tôi có đăng nhập google, đăng nhập facebook và tích hợp braintree. Tôi đã đặt đoạn mã sau vào appdelegate.swift: func application(_applicatio
Tôi có ứng dụng Flask và gần đây đã triển khai Flask-Login trong biểu mẫu đăng nhập/đăng xuất của mình: @account.route('/sign-in', Method=['POST', 'GET']) de
Các bạn ơi, tôi là người mới bắt đầu học iOS Swift. Tôi đã cố gắng đăng nhập google trong ứng dụng dùng thử của mình. Dựa trên tài nguyên từ Google Developers và các hướng dẫn khác, tôi đã đăng nhập thành công bằng UIView. Sau đó tôi đã cố gắng
Tôi đang sử dụng Ionic để xây dựng hệ thống đăng nhập dựa trên Codeigniter/Ion_Auth/codeigniter-restclient và khi tôi cố gắng đăng nhập từ "máy chủ ion" thì thông tin đăng nhập hoạt động tốt nhưng đối với L
Trong tệp Docker, tôi có cái này TỪ ubuntu RUN apt update && apt -y nâng cấp RUN apt install -y sudo # Thiết lập cho chúng tôi
Để phát triển Java, tôi sử dụng Slf4j và Logback. Trình ghi nhật ký = LoggerFactory.getLogger(HelloWorld.class);
Cách tốt nhất để đăng nhập vào ứng dụng Scala là gì? Điều gì đó phù hợp với triết lý ngôn ngữ, không làm lộn xộn mã, ít bảo trì và không phô trương. Đây là danh sách các yêu cầu cơ bản: Tính đơn giản không làm lộn xộn mã. Scala được biết đến vì sự đơn giản của nó. tôi không muốn
Tôi đang cố gắng chuyển đổi thông tin đăng nhập của mình sang Retrofit2 Đăng nhập cũ của tôi: lớp công khai Đăng nhậpHoạt động mở rộng Hoạt động { riêng tư
Tôi đang cố gắng đăng nhập bằng Google+ để hoạt động trên Android. Vấn đề của tôi là các ví dụ được cung cấp trên trang phát triển của Google hoạt động hoàn hảo bất cứ khi nào tôi chạy nó bằng Eclipse. Khi tôi ký apk và cài đặt thủ công trên thiết bị của mình
Câu hỏi này đã có câu trả lời: JS Đăng nhập đơn giản nhưng an toàn? [đã đóng] (1 câu trả lời) Đã đóng 6 năm trước. Tôi đang cố gắng tạo một trang đăng nhập bằng JavaScript. thực ra nó chỉ là một dải
Vui lòng xem các chương khác: React Xây dựng loạt đăng nhập hệ thống phụ trợ hiệu quả và chất lượng cao Bài viết này sẽ hoàn thành mô-đun đăng nhập. Hiệu ứng giống như spug: Yêu cầu như sau:
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 1 年前。
Tôi gặp sự cố khi sử dụng thành phần đăng nhập facebook trong ReactJs, mã giống hệt như trong tài liệu nhưng nó vẫn không hoạt động. Bạn có thể giúp tôi tìm ra những gì tôi đang làm sai? nhập React, {Thành phần
Tôi có một dự án chứa một số lớp "công cụ" có ghi nhật ký riêng. Các tệp nhật ký này được tạo khi ứng dụng khởi động nhưng trống cho đến khi được sử dụng. Có thể yêu cầu logback rằng nó không nên tạo các tệp trống khi khởi động không? Nhưng chỉ khi sử dụng chúng? Tôi không biết ở đâu
Tôi đang tạo một trang web yêu cầu sự cho phép của người dùng để truy cập một số tính năng nhất định. Tôi hiện đang xem xét cách người dùng tạo tài khoản và cách tận dụng các phiên để cho phép họ đăng nhập. Thông tin người dùng được lưu trữ trong bảng MySQL có tên người dùng, có thể bao gồm tên người dùng và
Tôi là một lập trình viên xuất sắc, rất giỏi!