zoukankan      html  css  js  c++  java
  • Android接入微信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 = "wxxxxxxx"; //替换为申请到的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("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();
        }
    }

     

    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.WXEntryActivity.java文件的位置是否正确

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

     

    官方文档:《移动应用微信登录开发指南》

     

    以上,发起微信授权登录部分完。

     

     

  • 相关阅读:
    C#发送邮件简单例子
    ABAP随笔
    日期格式转换
    正则校验金额,整数8位,小数3位。
    angular语法运用技巧
    Oracle中连接与加号(+)的使用
    含有代码分析的面试题
    面试的java题目
    递归查询
    本地没有ORACLE远程登录oracle服务器
  • 原文地址:https://www.cnblogs.com/chevin/p/6298343.html
Copyright © 2011-2022 走看看