この記事では、写真とテキストを使って詳しく説明しますAndroidWeChatログインを統合する手順は、記事にまとめられた内容を通じて、興味のある友人だけでWeChatログイン機能を実現することができます。 、見てみましょう。
1. まず、アプリケーションの作成時に次のように書き込みます:
// GeneralAppliction.java public static IWXAPI sApi; @Override public void onCreate() { super.onCreate(); sApi = WXEntryActivity.initWeiXin(this, AppConst.WEIXIN_APP_ID); }
2. ログインする必要がある場所を追加します:
// MainActivity.java WXEntryActivity.loginWeixin(MainActivity.this, GeneralAppliction.sApi);
三、下特定の統合手順の詳細な説明を提供します。
統合された手順: 在 1. オープン プラットフォームでアプリケーションを作成するために登録し、ログイン許可を申請します2. SDK をダウンロードし、 関連ファイル
をプロジェクト プロジェクト カタログにコピーします 3、グローバル初期化 WeChat コンポーネント を取得します。 5. コードを通じて認証パスワード access_token を取得します。 6. ステップ 5 で、access_token が存在し、有効期限が切れているかどうかを確認します。 7. access_token の有効期限が切れて無効な場合は、refresh_token を使用して更新 8. access_token を使用してユーザー情報を取得します1. オープン プラットフォームでアプリケーションを登録して作成し、ログイン許可を申請します
このステップは、実際には WeChat オープン プラットフォームにアカウントを登録することです。そしてモバイルアプリケーションを作成します。注意する必要があるのは、アプリケーションの署名部分です
注意が必要なこの問題については、次を参照してください: Android 署名の概要。
2. SDK をダウンロードし、関連ファイルをプロジェクト ディレクトリにコピーします
開発キット (SDK) のダウンロード: WeChat を使用して、必要なライブラリとファイルの共有、ログイン、収集、支払いなどを行うことができます。 例 デモをダウンロードした後、libammsdk.jar ファイルを AS プロジェクトの libs ディレクトリにコピーし、サンプル デモのソース ファイル ディレクトリの下にある wxapi ディレクトリ全体を、src の下にあるルート パッケージにコピーします。プロジェクト ディレクトリ:
wxapi フォルダーが間違った場所に配置されている場合、ログインできず、WeChat SDK はログイン アクティビティ認証関数を見つけることができません。次に Man
ifest.
を追加します:
<activity android:name=".wxapi.WXEntryActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" />
もちろんアプリケーションの onCreate で WeChat コンポーネントをグローバルに初期化します (もちろん、アクティビティの onCreate も使用できます) WeChat API をグローバルに使用するにはオブジェクト、操作を簡単にします):
@Override public void onCreate() { super.onCreate(); // 初始化微信组件 initWeiXin(); } public static IWXAPI sApi; private void initWeiXin() { sApi = WXEntryActivity.initWeiXin(this, AppConst.WEIXIN_APP_ID); }
同じビジネスの 1 つの原則で、WeChat に関連するすべてを wxapi にパッケージしました。パッケージと WXEntryActivity 内:
友人はコードが何であるかについて質問しています:
これは、サードパーティがコードを通じて access_token を取得するときに必要ですコードのタイムアウトは 10 分で、1 つのコードのみ Access_token が一度交換に成功すると無効になります。コードの一時的かつ 1 回限りの性質により、WeChat 承認ログインのセキュリティ が保証されます。サードパーティは、https および state パラメータを使用して、独自の承認されたログインのセキュリティをさらに強化できます。
クライアントが
を使用する唯一の場所は次のとおりです:WXEntryActivity.loginWeixin(MainActivity.this, GeneralAppliction.sApi);
onResp のコールバック メソッドでコードを取得します。次に、コード access_token を通じて認証パスワードを取得します:
在回调的onResp方法中获取code后,处理access_token是否登录过或者过期的问题:
// 从手机本地获取存储的授权口令信息,判断是否存在access_token,不存在请求获取,存在就判断是否过期 String accessToken = (String) ShareUtils.getValue(this, WEIXIN_ACCESS_TOKEN_KEY, "none"); String openid = (String) ShareUtils.getValue(this, WEIXIN_OPENID_KEY, ""); if (!"none".equals(accessToken)) { // 有access_token,判断是否过期有效 isExpireAccessToken(accessToken, openid); } else { // 没有access_token getAccessToken(code); }
判断授权口令是否有效:
/** * 判断accesstoken是过期 * @param accessToken token * @param openid 授权用户唯一标识 */ private void isExpireAccessToken(final String accessToken, final String openid) { String url = "https://api.weixin.qq.com/sns/auth?" + "access_token=" + accessToken + "&openid=" + openid; httpRequest(url, new ApiCallback<String>() { @Override public void onSuccess(String response) { Logger.e(response); if (validateSuccess(response)) { // accessToken没有过期,获取用户信息 getUserInfo(accessToken, openid); } else { // 过期了,使用refresh_token来刷新accesstoken refreshAccessToken(); } } @Override public void onError(int errorCode, final String errorMsg) { Logger.e(errorMsg); showMessage("错误信息: " + errorMsg); } @Override public void onFailure(IOException e) { Logger.e(e.getMessage()); showMessage("登录失败"); } }); }
7. 如果access_token过期无效,就用refresh_token来刷新
/** * 刷新获取新的access_token * / private void refreshAccessToken() { // 从本地获取以存储的refresh_token final String refreshToken = (String) ShareUtils.getValue(this, WEIXIN_REFRESH_TOKEN_KEY, ""); if (TextUtils.isEmpty(refreshToken)) { return; } // 拼装刷新access_token的url请求地址 String url = "https://api.weixin.qq.com/sns/oauth2/refresh_token?" + "appid=" + AppConst.WEIXIN_APP_ID + "&grant_type=refresh_token" + "&refresh_token=" + refreshToken; // 请求执行 httpRequest(url, new ApiCallback<String>() { @Override public void onSuccess(String response) { Logger.e("refreshAccessToken: " + response); // 判断是否获取成功,成功则去获取用户信息,否则提示失败 processGetAccessTokenResult(response); } @Override public void onError(int errorCode, final String errorMsg) { Logger.e(errorMsg); showMessage("错误信息: " + errorMsg); // 重新请求授权 loginWeixin(WXEntryActivity.this.getApplicationContext(), GeneralAppliction.sApi); } @Override public void onFailure(IOException e) { Logger.e(e.getMessage()); showMessage("登录失败"); // 重新请求授权 loginWeixin(WXEntryActivity.this.getApplicationContext(), GeneralAppliction.sApi); } }); }
8. 使用access_token获取用户信息
/** * 获取用户信息 * / private void getUserInfo(String access_token, String openid) { String url = "https://api.weixin.qq.com/sns/userinfo?" + "access_token=" + access_token + "&openid=" + openid; httpRequest(url, new ApiCallback<String>() { @Override public void onSuccess(String response) { // 解析获取的用户信息 WXUserInfo userInfo = mGson.fromJson(response, WXUserInfo.class); Logger.e("用户信息获取结果:" + userInfo.toString()); } @Override public void onError(int errorCode, String errorMsg) { showMessage("错误信息: " + errorMsg); } @Override public void onFailure(IOException e) { showMessage("获取用户信息失败"); } }); }
通信部分
private OkHttpClient mHttpClient = new OkHttpClient.Builder().build(); private Handler mCallbackHandler = new Handler(Looper.getMainLooper()); /** * 通过Okhttp与微信通信 * * @param url 请求地址 * @throws Exception */ public void httpRequest(String url, final ApiCallback<String> callback) { Logger.e("url: %s", url); final Request request = new Request.Builder() .url(url) .get() .build(); mHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { if (callback != null) { mCallbackHandler.post(new Runnable() { @Override public void run() { // 请求失败,主线程回调 callback.onFailure(e); } }); } } @Override public void onResponse(Call call, final Response response) throws IOException { if (callback != null) { if (!response.isSuccessful()) { mCallbackHandler.post(new Runnable() { @Override public void run() { // 请求出错,主线程回调 callback.onError(response.code(), response.message()); } }); } else { mCallbackHandler.post(new Runnable() { @Override public void run() { try { // 请求成功,主线程返回请求结果 callback.onSuccess(response.body().string()); } catch (final IOException e) { // 异常出错,主线程回调 mCallbackHandler.post(new Runnable() { @Override public void run() { callback.onFailure(e); } }); } } }); } } } }); } // Api通信回调接口 public interface ApiCallback<T> { /** * 请求成功 * * @param response 返回结果 */ void onSuccess(T response); /** * 请求出错 * * @param errorCode 错误码 * @param errorMsg 错误信息 */ void onError(int errorCode, String errorMsg); /** * 请求失败 */ void onFailure(IOException e); }
总结
集成的详细描述就这样,至于获取的用户信息,小伙伴们应该知道后续自己业务的需求,该怎么处理了。以上就是本文的全部内容了,希望能对大家的学习或者工作带来一定的帮助,如果有疑问大家可以留言交流。
以上がAndroid に WeChat ログインを統合する手順の詳細なグラフィックとテキストの説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。