首页 > 代码库 > 接入微信SDK之一:微信授权登录

接入微信SDK之一:微信授权登录

1.重要的事情首先说!

包名、应用签名、app id 三者都必须和在腾讯上申请的一致!!!否则将不能成功。

包名:就是在腾讯上申请的包名

应用签名:使用微信官网提供的《签名生成工具》(这个工具是一个apk安装包)安装到手机上获取包的签名(先将你的程序安装到手机上,再安装签名生成工具,在工具上输入你程序包名就可以获得)

app id:微信申请后可获得

 

2.使用默认值创建一个android项目(包名必须为在腾讯申请的包名!!!)

 

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

技术分享

技术分享

 

 

3.新增一个Constans.java文件用于记录全局的常量,结构如下(其中com.yiyou.game.d...r就是在微信上申请的包名)

技术分享

 

①Constants.java中的内容如下:

public class Constants {    public static final String APP_ID = "wxxxxxxxxa"; //替换为申请到的app id        public static IWXAPI wx_api; //全局的微信api对象}

 

②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);                                       }                       });    }}

 

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

 

4.获得微信调用的反馈

①在包名下新增wxapi文件夹(这个文件夹名字是微信官方规定的,必须一致)

技术分享

 

②在wxapi文件夹下新增继承于Activity并实现IWXAPIEventHandler接口的WXEntryActivity类(这个类名是微信官方规定的,必须一致)

 技术分享

 

③在eclipse中显示结构如下:

技术分享

 

④WXEntryActivity.java文件代码如下:

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("WXTst","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();    }}

 

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

①增加权限

    <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"/>  

 

②增加WXEntryActivity的配置

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

 

③总体情况如截图

技术分享

 

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

如果不行,那么可能的问题如下:

1.app id是否正确?

2.包名是否和申请时填写的一致?

3.应用签名是否和申请时填写的一致?(可以用签名生成工具对比一下)

4.AndroidManifest.xml中的配置是否正确?

 

 

 

接入微信SDK之一:微信授权登录