Im vorherigen Artikel „So lösen Sie das Timeout-Problem der SSH-Verbindung zu Linux (Freigabe)“ haben wir vorgestellt, wie Sie das Timeout-Problem der SSH-Verbindung zu Linux lösen können. Der folgende Artikel wird Ihnen helfen, den vollständigen Zusammenhang zwischen der Android-App und der autorisierten WeChat-Anmeldung zu verstehen. Ich hoffe, dass er für Freunde hilfreich ist.
Android-App und WeChat-autorisierte Anmeldung, vollständiges Andocken gemeinsam nutzen
Kontosystem
Registrieren Sie die offene WeChat-Plattform, erstellen Sie eine mobile Anwendung, geben Sie eine Reihe von Informationen ein, geben Sie App
-Signatur und Paketname, nach bestandener Prüfung AppID
und AppSecret
abrufenapp
签名和包名,审核通过之后,取得AppID
和AppSecret
加载sdk和初始化
加载微信sdk
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
初始化
public class App extends Application { public static IWXAPI iwxapi; public void onCreate() { super.onCreate(); // 通过WXAPIFactory工厂,获取IWXAPI的实例 iwxapi = WXAPIFactory.createWXAPI(this, BuildConfig.WXAPP_ID, true); // 将应用的appId注册到微信 iwxapi.registerApp(BuildConfig.WXAPP_ID); //建议动态监听微信启动广播进行注册到微信 registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // 将该app注册到微信 iwxapi.registerApp(BuildConfig.APPLICATION_ID); } }, new IntentFilter(ConstantsAPI.ACTION_REFRESH_WXAPP)); } }
WXAPP_ID
为开放平台提供的AppID
APPLICATION_ID
为app
包名
在app
根目录(/java/com.xxx.xxx/
) 新建Packagewxapi
, 在wxapi
新建Activity
名为:WXEntryActivity
,大概长这样:/java/com.xxx.xxx/wxapi/WXEntryActivity.java
public class WXEntryActivity extends Activity implements IWXAPIEventHandler { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 隐藏状态栏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //接收到分享以及登录的intent传递handleIntent方法,处理结果 App.iwxapi.handleIntent(getIntent(), this); } @Override public void onReq(BaseReq baseReq) { } @Override public void onResp(BaseResp baseResp) { switch (baseResp.errCode) { case BaseResp.ErrCode.ERR_OK: //微信回调成功 String code = ((SendAuth.Resp) baseResp).code; //取得微信的code ,就可以干很多事情 finish(); break; case BaseResp.ErrCode.ERR_AUTH_DENIED://用户拒绝授权 finish(); break; case BaseResp.ErrCode.ERR_USER_CANCEL://用户取消 finish(); break; default: finish(); break; } } }
通过code
取得open
信息,比如openid
,access_token
等一系列信息。
private void getOpenInfo(String code) { OkHttpUtils.get().url("https://api.weixin.qq.com/sns/oauth2/access_token") .addParams("appid", BuildConfig.WXAPP_ID) .addParams("secret", BuildConfig.WXAPP_Secret) .addParams("code", code) .addParams("grant_type", "authorization_code") .build().execute(new StringCallback() { @Override public void onError(Call call, Exception e, int id) { Toast.makeText(WXEntryActivity.this, "微信授权失败", Toast.LENGTH_LONG).show(); finish(); } @Override public void onResponse(String response, int id) { JSONObject jsonObject = JSONObject.parseObject(response); String openId = jsonObject.getString("openid"); String access_token = jsonObject.getString("access_token"); Log.v("openId", openId + "---" + access_token); // 取得openid 又可以干很多事情 // 在这里可以 对接 自己的 系统的用户信息等 finish(); } }); }
通过openid
可以查询用户昵称,头像等信息。
private void getUserInfo(String access_token, String openid) { OkHttpUtils.get().url("https://api.weixin.qq.com/sns/userinfo") .addParams("access_token", access_token) .addParams("openid", openid) .build().execute(new StringCallback() { @Override public void onError(Call call, Exception e, int id) { finish(); Toast.makeText(WXEntryActivity.this, "微信授权失败", Toast.LENGTH_LONG).show(); } @Override public void onResponse(String response, int id) { //JSONObject jsonObject = JSONObject.parseObject(response); Log.v("response", response); } }); }
分享图片:
/** *bmp 分享图片 *width 缩略图宽 *height 缩略图高 *sence 分享场景 0:分享到对话,1:朋友圈 ,2:分享到收藏 */ public static void Image(Bitmap bmp, int width, int height, int sence) { //初始化 WXImageObject 和 WXMediaMessage 对象 WXImageObject imgObj = new WXImageObject(bmp); WXMediaMessage msg = new WXMediaMessage(); msg.mediaObject = imgObj; //设置缩略图 Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, width, height, true); //bmp.recycle(); msg.thumbData = bmpToByteArray(thumbBmp); //构造一个Req SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("img"); req.message = msg; req.scene = sence; req.userOpenId = App.userInfo.getOpenId(); //调用api接口,发送数据到微信 App.iwxapi.sendReq(req); }
分享链接
/** *url: 分享链接 *title: 分享标题 *desc: 分享描述 *thumbBmp: 分享缩略图 *sence: 分享场景 0:分享到对话,1:朋友圈 ,2:分享到收藏 */ public static void Url(String url, String title, String desc, Bitmap thumbBmp, int sence) { //初始化一个WXWebpageObject,填写url WXWebpageObject webpage = new WXWebpageObject(); webpage.webpageUrl = url; //用 WXWebpageObject 对象初始化一个 WXMediaMessage 对象 WXMediaMessage msg = new WXMediaMessage(webpage); msg.title = title; msg.description = desc; msg.thumbData = bmpToByteArray(thumbBmp); //构造一个Req SendMessageToWX.Req req = new SendMessageToWX.Req(); req.transaction = buildTransaction("webpage"); req.message = msg; req.scene = sence; req.userOpenId = App.userInfo.getOpenId(); //调用api接口,发送数据到微信 App.iwxapi.sendReq(req); }
俩辅助函数
private static String buildTransaction(String type) { return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis(); } private static byte[] bmpToByteArray(Bitmap bmp) { ByteArrayOutputStream output = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.PNG, 100, output); byte[] result = output.toByteArray(); try { output.close(); } catch (Exception e) { e.printStackTrace(); } return result; }
这个逼库经常加载失败,时不时的抽风
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
解决办法:把包给down 下来,手动加载 ,在这里:https://bintray.com/wechat-sdk-team/maven
下载对应版本库如: wechat-sdk-android-without-mta-6.6.5.aar,放到libs目录,手动加载即可
android { compileSdkVersion 28 repositories { //本地aar方式 flatDir { dirs 'libs' //this way we can find the .aar file in libs folder } } } implementation(name: 'wechat-sdk-android-without-mta-6.6.5', ext: 'aar')
分享之后关闭不掉的问题,也就是finish失效
事实上在回调之后,不是BaseResp.ErrCode.ERR_OK
sdk
🎜public void onResp(BaseResp baseResp) { switch (baseResp.errCode) { case BaseResp.ErrCode.ERR_OK: // 在此处应该还需要判断 回调成功类型。是登录还是分享,然后做相对应的操作 switch (baseResp.getType()) { case ConstantsAPI.COMMAND_SENDAUTH: //登录成功的回调 String code = ((SendAuth.Resp) baseResp).code; // 登录 todo break; case ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX: //分享成功 // 分享 todo Toast.makeText(getApplicationContext(), "分享成功!", Toast.LENGTH_LONG).show(); finish(); break; default: finish(); break; } case BaseResp.ErrCode.ERR_USER_CANCEL://用户取消 finish(); break; default: finish(); break; } }
WXAPP_ID
ist die AppID
, die von der offenen Plattform bereitgestellt wird🎜🎜APPLICATION_ID
ist app code>Paketname🎜🎜Autorisierungs-Anmeldeteil🎜🎜Erstellen Sie ein neues Paket<code>wxapi
im Stammverzeichnis app
(/java/com .xxx.xxx/
) erstellen Sie eine neue Activity
in wxapi
mit dem Namen: WXEntryActivity
, die wie folgt aussieht: /java/com.xxx.xxx/wxapi/WXEntryActivity .java🎜rrreee🎜erhält offene
-Informationen über code
, wie z. B. openid, <code>access_token
usw. Informationen. 🎜rrreee🎜Sie können den Spitznamen, den Avatar und andere Informationen des Benutzers über openid
abfragen. 🎜rrreee🎜Freigabebereich🎜🎜Bilder teilen: 🎜rrreee🎜Link teilen🎜rrreee🎜Zwei Hilfsfunktionen🎜rrreee🎜Notizen🎜🎜🎜🎜Diese erzwungene Bibliothek lädt oft nicht und krampft von Zeit zu Zeit zusammen🎜🎜 🎜rrreee🎜🎜Lösung: Laden Sie das Paket herunter und laden Sie es manuell hier: https://bintray.com/wechat-sdk-team/maven🎜🎜🎜Laden Sie die entsprechende Versionsbibliothek herunter, z. B.: wechat-sdk-android-without-mta-6.6.5. aar, legen Sie es in das libs-Verzeichnis und laden Sie es manuell🎜rrreee🎜🎜🎜Das Problem kann nach der Freigabe nicht geschlossen werden, d. ErrCode.ERR_OK Das war's, hier muss es eine Ebene logischen Urteils geben: 🎜rrreee🎜【Ende】🎜🎜Empfohlenes Lernen: 🎜Java-Video-Tutorial🎜🎜Das obige ist der detaillierte Inhalt vonEine kurze Analyse der vollständigen Verbindung zwischen der Android-App und der autorisierten WeChat-Anmeldung und -Freigabe (Code-Sharing). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!