1. 申请微信开发平台账号、申请appID

微信开放平台申请账号,登录后到管理中心创建项目,我这里是Android项目,所以这里是创建移动项目。

第一步:填应用信息上传应用缩略图,这个随意传。

第二步:官网随便填(当时填了百度都没事),然后应用平台选择Android,特别注意包名要和需要开发的包名是完全一致的(如果不知道在Manifest中找),而签名则需要通过你KeyStone来决定(请看第二点)。

第三步:提交审核,只有通过审核后你才能拿到AppID和AppSecret来开发,审核时间挺久的,耐心等待。

2. 签名生成与使用

1,签名生成工具

到微信开放平台的资源中心去下载签名生成工具并安装到测试手机上,(链接:签名生成工具

2,对测试应用进行签名

必须始终使用同一个KeyStore来签名。因为签名生成工具是通过应用的包名找到应用的KeyStore,以此来生成签名的。假如更改了KeyStore必须在重新生成签名并更新到微信开放平台。

3, 安装签名过的APK,并使用签名生成工具生成签名。

4, 将生成的签名填在微信开放平台的应用签名中。

3. 实现过程

3.1下载SDK

Android Studio环境下:

在build.gradle文件中,添加如下依赖即可:

dependencies {
    compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}

dependencies {
    compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}

(其中,前者包含统计功能)

3.2 搭建开发环境

在Android Studio中新建你的工程,并保证网络设置可以成功从jcenter下载微信SDK即可。

3.3 在代码中使用开发工具包

3.3.1 AndroidManifest.xml 设置,添加必要的权限支持:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

3.3.2 混淆代码

如果需要混淆代码,为了保证sdk的正常使用,需要在proguard-rules.pro文件加上下面两行配置:

-keep class com.tencent.mm.opensdk.** {
   *;
}
-keep class com.tencent.wxop.** {
   *;
}
-keep class com.tencent.mm.sdk.** {
   *;
}

3.4 在代码中使用

3.4.1 在界面上增加一个Button按钮,方便模拟登陆发起

android登录界面 微信 android 微信登录流程_Android

3.4.2 新增一个Constans.java文件用于记录全局的常量

public class Constants {
    public static final String APP_ID = "wxxxxxxx"; //替换为申请到的app id

    public static IWXAPI wx_api; //全局的微信api对象
}

3.4.3 MainActivity.java中的内容如下

public class MainActivity extends Activity {    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //创建微信api并注册到微信
        Constants.wx_api = WXAPIFactory.createWXAPI(MainActivity.this, Constants.APP_ID, true);
        Constants.wx_api.registerApp(Constants.APP_ID);

        Button btn = (Button)findViewById(R.id.button1);//得到按钮    
        btn.setOnClickListener(new OnClickListener() { //注册按钮点击事件 
            @Override
            public void onClick(View v) {                   
                //发起登录请求
                final SendAuth.Req req = new SendAuth.Req();
                req.scope = "snsapi_userinfo";
                req.state = "wechat_sdk_demo_test";
                Constants.wx_api.sendReq(req);                           
            }               
        });
    }
}

这时候就可以发起微信登录了,但是要得到微信的返回结果,还需要下面的步骤

3.4.4.获得微信调用的反馈

1.新建WXEntryActivity.java

在包名下面创建wxapi的包,并在wxapi的包中创建WXEntryActivity继承Activity,实现IWXAPIEventHandler接口,最后在Manifest中设置Activity的exported属性为true。这条很重要,如果不是”包名.wxapi.WXEntryActivity”的路径,就获取不到返回值。

public class WXEntryActivity extends Activity implements IWXAPIEventHandler {    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);        

        Constants.wx_api.handleIntent(getIntent(), this);
    }

    //微信请求相应
    @Override
    public void onReq(BaseReq baseReq) {

    }

    //发送到微信请求的响应结果
    @Override
    public void onResp(BaseResp resp) {
        switch (resp.errCode) {
            case BaseResp.ErrCode.ERR_OK:
                Log.i("WXTest","onResp OK");

                if(resp instanceof SendAuth.Resp){
                    SendAuth.Resp newResp = (SendAuth.Resp) resp;
                    //获取微信传回的code
                    String code = newResp.code;
                    Log.i("WXTest","onResp code = "+code);
                }

                break;
            case BaseResp.ErrCode.ERR_USER_CANCEL:
                Log.i("WXTest","onResp ERR_USER_CANCEL ");
                //发送取消
                break;
            case BaseResp.ErrCode.ERR_AUTH_DENIED:
                Log.i("WXTest","onResp ERR_AUTH_DENIED");
                //发送被拒绝
                break;
            default:
                Log.i("WXTest","onResp default errCode " + resp.errCode);
                //发送返回
                break;
        }
        finish();
    }
}

2.在AndroidManifest.xml中对WXEntryActivity进行配置

<activity
    android:exported="true"
    android:name=".wxapi.WXEntryActivity" 
    android:launchMode="singleTop"
    android:theme="@android:style/Theme.NoDisplay"/>

编译生成运行,即可发起微信登录并得到微信返回。

4.参考文章

微信开放平台—>Android接入指南