📅  最后修改于: 2023-12-03 14:49:47.452000             🧑  作者: Mango
在 Android 应用程序中,登录身份验证是一个非常普遍的需求。GitHub 提供了 OAuth 2.0 身份验证,允许用户通过使用他们的 GitHub 帐户进行身份验证。Volley 是一种流行的 Android 库,用于快速轻松地进行网络请求。在本文中,我们将介绍如何使用 Volley 和 GitHub 在 Android 应用程序中实现登录身份验证。
在使用 GitHub 身份验证 API 之前,你需要在 GitHub 上注册你的应用程序并获取客户端 ID 和客户端密钥。按照以下步骤完成:
将这些详细信息保存在一个安全的地方,后面将使用它们进行身份验证。
要使用 Volley 进行网络请求,你需要在你的 Android 项目中添加 Volley 依赖项。
build.gradle
文件中添加以下依赖:dependencies {
implementation 'com.android.volley:volley:1.2.0'
}
<uses-permission android:name="android.permission.INTERNET" />
现在,你已经可以使用 Volley 进行网络请求了。
在你的 Android 应用程序中,你需要创建一个 Activity 来处理登录流程。在这个 Activity 中,你需要显示一个登录按钮,当用户单击该按钮时,启动 GitHub 身份验证流程。
LoginActivity
。LoginActivity
的布局文件中添加一个登录按钮。<Button
android:id="@+id/login_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Login with GitHub" />
LoginActivity
的 Java 文件中,获取登录按钮并添加点击事件。Button loginButton = findViewById(R.id.login_button);
loginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 在这里添加启动 GitHub 身份验证流程的代码。
}
});
现在你已经准备好启动 GitHub 身份验证流程了。
在用户单击登录按钮后,你需要启动 GitHub 身份验证流程。这个过程可以在 WebView 中完成。
LoginActivity
中添加以下代码:String url = "https://github.com/login/oauth/authorize"
+ "?client_id=<YOUR_CLIENT_ID>"
+ "&scope=read:user,user:email";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
将 <YOUR_CLIENT_ID>
替换为你在第一步中获取的客户端 ID。
LoginActivity
中添加以下方法,以捕获 GitHub 回调 URL:@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Uri uri = intent.getData();
if (uri != null && uri.toString().startsWith("<YOUR_CALLBACK_URL>")) {
String code = uri.getQueryParameter("code");
if (code != null) {
// 在这里向 GitHub 发送网络请求,以获取访问令牌(access token)。
} else {
// 处理错误的回调。
}
}
}
将 <YOUR_CALLBACK_URL>
替换为你在第一步中注册应用程序时指定的回调 URL。
现在,当用户单击登录按钮时,他们将被重定向到 GitHub 登录页面。一旦他们完成了登录和授权过程,他们将被重定向回你的应用程序,并携带一个授权代码。该代码将用于获取访问令牌。
在上一步中,我们捕获了 GitHub 的回调 URL,并提取了一段授权代码。现在,我们需要使用该代码向 GitHub 发送网络请求,以获取访问令牌。
LoginActivity
的 onNewIntent
方法中添加以下代码:String url = "https://github.com/login/oauth/access_token"
+ "?client_id=<YOUR_CLIENT_ID>"
+ "&client_secret=<YOUR_CLIENT_SECRET>"
+ "&code=" + code;
StringRequest request = new StringRequest(Request.Method.POST, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// 在这里处理成功的响应。
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
// 在这里处理错误的响应。
}
});
RequestQueue queue = Volley.newRequestQueue(this);
queue.add(request);
将 <YOUR_CLIENT_ID>
和 <YOUR_CLIENT_SECRET>
替换为你在第一步中获取的客户端 ID 和客户端密钥。
String accessToken = "";
try {
String[] parts = response.split("&");
for (String part : parts) {
String[] keyValue = part.split("=");
if (keyValue[0].equals("access_token")) {
accessToken = keyValue[1];
break;
}
}
} catch (Exception e) {
// 处理错误的响应。
}
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = prefs.edit();
editor.putString("access_token", accessToken);
editor.apply();
现在,当用户完成 GitHub 身份验证流程时,他们将被重定向回你的应用程序,并且你的应用程序将能够使用访问令牌进行 API 调用。
在本文中,我们介绍了如何使用 Volley 和 GitHub 在 Android 应用程序中实现登录身份验证。通过遵循上述步骤,你可以为你的应用程序添加用户身份验证,并与 GitHub 的身份验证 API 进行交互。