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中的配置是否正确?
官方文档:《移动应用微信登录开发指南》
以上,发起微信授权登录部分完。