1. 程式人生 > 其它 >Android 微信登陸

Android 微信登陸

1.首先我們應該先去微信開放平臺(https://open.weixin.qq.com)填寫應用資訊,提交稽核

2.稽核完成微信開放平臺會生成一個appid,和sercet,拿到之後請妥善保管

  1. 按照微信開放平臺給的文件,下載相應的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() {

                    }
                });
            }
        });
        }
}

寫到這,微信登陸就完成了!!!!
最後 喜歡的話 就點個贊吧!!!