Integración de WeChat para el desarrollo de Android

Empieza a escribir. El inicio de sesión social es una característica muy importante para la mayoría de las aplicaciones móviles en estos días. Es una manera fácil para que el usuario se registre y se autentique en su aplicación. WeChat es una de las redes sociales más importantes de China. Tiene más de 100 millones de usuarios. Entonces, si se dirige a usuarios de China, debe iniciar sesión con WeChat como la función principal de su aplicación.
En este artículo, le mostraré cómo integrar WeChat para su aplicación de Android. Para comenzar, deberá crear una cuenta de WeChat aquí en el sitio para desarrolladores. Asegúrese de abrir este enlace a través de Google Chrome, ya que la función de traducción es muy útil. Después de ir a la página del Centro de administración, encontrará el botón verde «Crear aplicación móvil». Haga clic en ese botón y accederá a la pantalla de detalles de la siguiente manera.
Ingrese los datos requeridos. Hay una opción llamada «La aplicación está disponible». Si elige «sí», significa «producción» y «no» para la depuración. Haga clic en el botón Siguiente paso. Ahora debe elegir el tipo de aplicación (Android / IOS) y completar algunos datos de acuerdo con su selección, como el nombre del paquete y el método de firma, y luego hacer clic en Enviar para verificar. La aplicación puede tardar entre 1 y 7 días hábiles en aprobarse.
Notas importantes:
Si tiene diferentes variantes de compilación como Dev, QA, Prod, debe crear diferentes aplicaciones para cada nombre de paquete.
El método de firma es una clave generada a partir del APK de firma. Puedes descargarlo aquí. Es parte de los recursos de descarga.
Para obtener la clave de firma, instale Signature APK, ingrese el nombre del paquete y haga clic en el botón, copie y pegue la clave en el formulario cuando cree la aplicación en el portal WeChat.
Una vez aprobada la aplicación, copie el ID y el secreto de la aplicación.
WeChat tiene algunas limitaciones en términos de actividad de autenticación. Debe definir la actividad «WXEntryActivity» con el nombre «Wxapi» en el paquete de su aplicación. Esto es muy importante
Ahora vayamos a la parte de codificación.
1- Cree la actividad de autenticación en el paquete requerido de la siguiente manera
La clase pública WXEntryActivity extiende la actividad implementa IWXAPIEventHandler
Cadena final estática pública APP_ID = WeChatManager.APP_ID;
token de cadena estática pública;
privado IWXAPI wxAPI;
escuchador WeChatLoginListener estático privado = WeChatInteractor.weChatLoginListener;
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
// Handle any communication from WeChat and then terminate activity. This class must be
// an activity
// or the communication will not be received from WeChat.
wxAPI = WXAPIFactory.createWXAPI(this, APP_ID, true);
wxAPI.registerApp(APP_ID);
wxAPI.handleIntent(getIntent(), this);
@Override
protected void onNewIntent(Intent intent)
super.onNewIntent(intent);
wxAPI.handleIntent(getIntent(), this);
/**
* Called when WeChat is initiating a request to your application. This is not used for
* authentication.
*
* @param req
*/
@Override
public void onReq(BaseReq req)
Log.i("ansen", "WXEntryActivity onReq:" + req);
/**
* Called when WeChat is responding to a request this app initiated. Invoked by WeChat after
* authorization has been given by the user.
*
* @param resp
*/
@Override
public void onResp(BaseResp resp)
parseLoginResp(resp);
finish();
public static void doWeChatLogin(Activity activity)
String strState = activity.getPackageName();
IWXAPI api = WXAPIFactory.createWXAPI(activity, APP_ID, false);
api.registerApp(APP_ID);
SendAuth.Req req = new SendAuth.Req();
req.scope = WeChatManager.SCOPE;
req.state = strState;
api.sendReq(req);
private void parseLoginResp(BaseResp resp)
SendAuth.Resp response = (SendAuth.Resp) resp;
switch (resp.errCode)
case BaseResp.ErrCode.ERR_OK:
listener.onSuccess(response.code);
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
listener.onCancel();
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
listener.onError(new WeChatAuthDenied(null));
break;
default:
listener.onError(new WeChatBazyNetwork(resp.errStr));
}
2- Cree WeChat Manager para realizar todas las funciones relacionadas con WeChat de la siguiente manera:
clase pública WeChatManager {
Cadena final estática pública APP_ID = «YOUR_APP_ID»;
cadena final estática pública APP_SECRET = «Tu secreto»
public static final String SCOPE = "snsapi_userinfo";
private String accessToken;
private String refreshToken;
private String openID;
private static volatile WeChatManager INSTANCE;
private WeChatManager()
public static WeChatManager getInstance()
if (INSTANCE == null)
synchronized (WeChatManager.class)
if (INSTANCE == null)
INSTANCE = new WeChatManager();
return INSTANCE;
private JSONObject getAccessTokenUsingCode(String code) throws IOException, JSONException
OkHttpClient client = new OkHttpClient();
HttpUrl httpUrl = new HttpUrl.Builder()
.scheme("https")
.host("api.weixin.qq.com")
.addPathSegment("sns")
.addPathSegment("oauth2")
.addPathSegment("access_token")
.addQueryParameter("appid", APP_ID)
.addQueryParameter("secret", APP_SECRET)
.addQueryParameter("grant_type", "authorization_code")
.addQueryParameter("code", code)
.build();
Request request = new Request.Builder().url(httpUrl).build();
Response response = client.newCall(request).execute();
return new JSONObject(response.body().string());
private JSONObject getAccessTokenUsingRefreshToken(String refreshToken) throws IOException,
JSONException
OkHttpClient client = new OkHttpClient();
HttpUrl httpUrl = new HttpUrl.Builder()
.scheme("https")
.host("api.weixin.qq.com")
.addPathSegment("sns")
.addPathSegment("oauth2")
.addPathSegment("refresh_token")
.addQueryParameter("appid", APP_ID)
.addQueryParameter("grant_type", "refresh_token")
.addQueryParameter("refresh_token", refreshToken)
.build();
Request request = new Request.Builder().url(httpUrl).build();
Response response = client.newCall(request).execute();
return new JSONObject(response.body().string());
public void getAccessToken(String code, WeChatAccessTokenCallback callaback)
Single.fromCallable(() -> getAccessTokenUsingCode(code))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
data ->
this.accessToken = data.optString("access_token");
this.refreshToken = data.optString("refresh_token");
this.openID = data.optString("openid");
callaback.onSuccess(accessToken);
,
error -> callaback.onError(error));
public String getRefreshToken()
return refreshToken;
@SuppressLint("CheckResult")
public void refreshAccessToken(String refreshToken, WeChatRefreshTokenCallback callback)
Single.fromCallable(() -> getAccessTokenUsingRefreshToken(refreshToken))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
data ->
this.accessToken = data.optString("access_token");
this.refreshToken = data.optString("refresh_token");
this.openID = data.optString("openid");
callback.onSuccess(accessToken);
,
error -> callback.onError(error)
);
// you need WeChat app to be installed to be able to authenticate with it.
//WeChat does't have web view like AliPay when app is not installed
public boolean isWeChatAppInstalled(IWXAPI api)
api.registerApp(APP_ID);
return api.isWXAppInstalled();
public String getWeChatOpenID()
return openID;
private Single<JSONObject> getUserProfileData(String accessToken, String openId) throws IOException,
JSONException
OkHttpClient client = new OkHttpClient();
HttpUrl httpUrl = new HttpUrl.Builder()
.scheme("https")
.host("api.weixin.qq.com")
.addPathSegment("sns")
.addPathSegment("userinfo")
.addQueryParameter("access_token", accessToken)
.addQueryParameter("openid", openId)
.build();
Request request = new Request.Builder().url(httpUrl).build();
Response response = client.newCall(request).execute();
JSONObject jsonObject = new JSONObject(response.body().string());
return Single.just(jsonObject);
}}
interfaz pública WeChatAccessTokenCallback
void onSuccess (String accessToken);
void onError (Throwable e);
}
interfaz pública WeChatRefreshTokenCallback
String onSuccess (String accessToken);
void onError (Throwable e);
}
3- Cree un oyente de inicio de sesión de Wechat de la siguiente manera:
interfaz pública WeChatLoginListener
void onSuccess (String accessCode);
void onError (error RuntimeException);
void onCancel ();
}
4- Aborda algunos errores comunes
La clase pública WeChatBazyNetwork extiende RuntimeException
Mensaje de cadena;
public WeChatBazyNetwork (mensaje de cadena)
this.message = mensaje;
}}
La clase pública WeChatAuthDenied extiende RuntimeException
Mensaje de cadena;
public WeChatAuthDenied (mensaje de cadena)
this.message = mensaje;
}}
5- Llame a la función Auth desde su caso de uso o su cliente (actividad / fragmento).
fun startWeChatLogin () {
weChatLoginListener = object : WeChatLoginListener
override fun onSuccess(accessCode: String)
WeChatManager.getInstance()
.getAccessToken(accessCode, object : WeChatAccessTokenCallback
override fun onSuccess(accessToken: String)
Log.e("TTT", accessToken)
//val openId = //WeChatManager.getInstance().weChatOpenID
override fun onError(error: Throwable)
)
override fun onError(error: RuntimeException)
override fun onCancel()
//actual auth call
WXEntryActivity.doWeChatLogin(activity)
Finalmente, espero que encuentre esto útil, por favor aplauda sobre este artículo y si tiene alguna pregunta envíeme un mensaje en el comentario y me comunicaré con usted pronto, ISA.
ESCRITO POR
Mahmoud Ramadán
Responsable de tecnología de Android | Desarrollador de software
Aquí…