Android 微信登陸
阿新 • • 發佈:2021-01-06
1.首先我們應該先去微信開放平臺(https://open.weixin.qq.com)填寫應用資訊,提交稽核
2.稽核完成微信開放平臺會生成一個appid,和sercet,拿到之後請妥善保管
- 按照微信開放平臺給的文件,下載相應的sdk以及簽名工具,在此強調 必須是用簽名打包的正式版的apk才可以調起微信的客戶端進行授權登入,必須保證應用的簽名(用簽名工具可以獲取)和開放平臺上填寫的資訊一致。
4.開始程式碼模組
在app級別的build.gradle裡面新增依賴
//微信
implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
android{
defaultConfig{
//微信登陸
signingConfigs {
release {
storeFile file('health.keystore')
keyAlias "health"
storePassword "123456"
keyPassword "123456"
}
debug {
storeFile file('health.keystore')
keyAlias "health"
storePassword "123456"
keyPassword "123456"
}
}
}
buildTypes {
release {
minifyEnabled true
zipAlignEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.debug
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
}
5.建一個包 名字叫wxapi(必須一致) 在這個包裡建立一個類,WXEntryActivity(一致)
public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
private static final int RETURN_MSG_TYPE_LOGIN = 1;
private String code;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FrescoApp.mWxApi.handleIntent(getIntent(),this);
}
@Override
public void onReq(BaseReq baseReq) {
}
@Override
public void onResp(BaseResp baseResp) {
//登入回撥
switch (baseResp.errCode){
case BaseResp.ErrCode.ERR_OK:
switch (baseResp.getType()){
case RETURN_MSG_TYPE_LOGIN:
//拿到了微信返回的code,立馬再去請求access_token
code = ((SendAuth.Resp)baseResp).code;
if (TextUtils.isEmpty(code)){
code =getIntent().getStringExtra("_wxapi_sendauth_resp_token");
}
Log.i("wx_code", code);
//Toast.makeText(this, "登陸成功", Toast.LENGTH_SHORT).show();
//就在這個地方,用網路庫什麼的或者自己封的網路api,發請求去咯,注意是get請求
Intent intent = new Intent(this, LoginActivity.class);
intent.putExtra("code",code);
startActivity(intent);
finish();
break;
}
break;
}
}
}
6.在AndroidManifest.xml註冊:
<activity android:name=".wxapi.WXEntryActivity"
android:exported="true"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="wxe3fcbe8a55cd33ff" />
</intent-filter>
</activity>
7.在App裡面 //別忘了在清單檔案裡面也初始化App
public class FrescoApp extends Application {
public static FrescoApp context;
public static IWXAPI mWxApi;
@Override
public void onCreate() {
super.onCreate();
context = this;
Fresco.initialize(this);
registerTowX();
}
private void registerTowX() {
//AppConst.WEIXIN.APP_ID是指你應用在微信開放平臺上的AppID,記得替換。
mWxApi = WXAPIFactory.createWXAPI(this, "wxe3fcbe8a55cd33ff", true);
// 將該app註冊到微信
mWxApi.registerApp("wxe3fcbe8a55cd33ff");
}
//app
public static FrescoApp getApp(){
return context;
}
}
8.一定別忘了拿到傳過來的code值
public class LoginActivity extends AppCompatActivity {
private Imageview wechat_pay;
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
wechat_pay = findViewById(wechat_pay);
//微信登陸
wechat_pay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!FrescoApp.mWxApi.isWXAppInstalled()){
Toast.makeText(LoginActivity.this, "您還未安裝微信客戶端", Toast.LENGTH_SHORT).show();
return;
}
final SendAuth.Req req = new SendAuth.Req();
req.scope="snsapi_userinfo";
req.state="diandi_wx_login";
FrescoApp.mWxApi.sendReq(req);
Intent intent = getIntent();
String code = intent.getStringExtra("code");
RetrofitUtils.getInstance().getWechatlogin(code, new Observer<WeChatLoginBean>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(WeChatLoginBean value) {
if (value.getStatus().equals("0000")){
Toast.makeText(LoginActivity.this, value.getMessage(), Toast.LENGTH_SHORT).show();
Intent intent = new Intent(LoginActivity.this, Login2Activity.class);
startActivity(intent);
finish();
}
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
});
}
}
寫到這,微信登陸就完成了!!!!
最後 喜歡的話 就點個贊吧!!!