📌  相关文章
📜  在 Android 上使用 GitHub 进行身份验证(1)

📅  最后修改于: 2023-12-03 15:07:36.931000             🧑  作者: Mango

在 Android 上使用 GitHub 进行身份验证

在 Android 应用程序中,通过 GitHub 进行身份验证是一个常见的需求。GitHub 账户可以用于身份验证和授权,以及对 API 的访问。

第一步:创建 GitHub 应用程序

要使用 GitHub 进行身份验证,必须首先创建一个 GitHub 应用程序。请按照以下步骤操作:

  1. 使用 GitHub 帐户登录 开发人员设置页面
  2. 点击“New OAuth App”按钮创建一个新的应用程序。
  3. 在下面的表格中填写相应的字段,并设置应用程序主页和授权回调 URL。
  4. 点击“Register application”按钮。

在应用程序注册后,您将获得一个客户端 ID 和一个客户端密钥。

第二步:为 Android 应用程序添加 GitHub 身份验证

现在您已经有了一个 GitHub 应用程序,接下来该如何在 Android 应用程序中使用它呢?

以下是附加 GitHub 身份验证的步骤:

  1. 将以下依赖项添加到您的项目中:
compile 'org.eclipse.egit:org.eclipse.egit.github.core:2.1.5'
compile 'com.github.GrenderG:preference-annotations:1.0.3'
compile 'com.github.GrenderG:material-preferences:1.1'
  1. 在您的 AndroidManifest.xml 文件中添加以下权限:
<uses-permission android:name="android.permission.INTERNET" />
  1. 在您的应用程序中添加以下代码以进行身份验证:
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import org.eclipse.egit.github.core.client.GitHubClient;
import org.eclipse.egit.github.core.client.GitHubResponse;
import org.eclipse.egit.github.core.service.UserService;

import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    private static final String LOG_TAG = MainActivity.class.getSimpleName();

    private SharedPreferences mSharedPreferences;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

        String accessToken = mSharedPreferences.getString(getString(R.string.pref_access_token_key), "");

        if (accessToken.isEmpty()) {
            new GetAccessTokenTask().execute();
        } else {
            Log.d(LOG_TAG, "Access token already exists: " + accessToken);
        }
    }

    private class GetAccessTokenTask extends AsyncTask<Void, Void, String> {

        private static final String CLIENT_ID = "YOUR_CLIENT_ID";
        private static final String CLIENT_SECRET = "YOUR_CLIENT_SECRET";

        @Override
        protected String doInBackground(Void... params) {
            GitHubClient client = new GitHubClient();
            client.setCredentials(CLIENT_ID, CLIENT_SECRET);
            UserService userService = new UserService(client);
            try {
                GitHubResponse response = userService.createAuthorization("YOUR_NOTE", null, "repo,user");
                return response.getBody();
            } catch (IOException e) {
                Log.e(LOG_TAG, "Failed to get access token", e);
            }
            return null;
        }

        @Override
        protected void onPostExecute(String accessToken) {
            if (accessToken != null) {
                Log.d(LOG_TAG, "Access token: " + accessToken);
                mSharedPreferences.edit().putString(getString(R.string.pref_access_token_key), accessToken).apply();
            }
        }
    }
}
  1. 在设置中添加以下代码以存储 AccessToken:
import android.os.Bundle;
import android.support.v7.preference.PreferenceFragmentCompat;

public class SettingsFragment extends PreferenceFragmentCompat {

    @Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        addPreferencesFromResource(R.xml.preferences);
        bindPreferenceSummaryToValue(findPreference(getString(R.string.pref_access_token_key)));
    }
}
  1. 在您的偏好项 XML 文件中添加以下代码:
<EditTextPreference
    android:defaultValue=""
    android:dialogTitle="@string/auth_dialog_title"
    android:key="@string/pref_access_token_key"
    android:summary="@string/auth_dialog_summary"
    android:title="@string/auth_dialog_title" />
  1. 您可以使用 AccessToken 进行身份验证,如下所示:
GitHubClient client = new GitHubClient();
client.setOAuth2Token(accessToken);
UserService userService = new UserService(client);
User user = userService.getUser();
结论

现在您已经知道如何在 Android 应用程序中使用 GitHub 进行身份验证。通过将访问令牌保存在 SharedPreferences 中,您可以轻松地从应用程序中进行身份验证。

参考文献

GitHub API 授权文档