第一次做微信遇到了蛮多了问题,把自己遇到的记录下来:
微信登录分步:
一,在微信开放开台创建应用(https://open.weixin.qq.com/),填写应用下面的应用包名和签名,签名去下载微信里面的工具(https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&lang=zh_CN),安装在手机输入应用包名(前提是手机安装了你自己的应用),填写好信息就去申请微信登录接口(要钱的);
二,微信那边通过了你的申请。现在按照他的方法集成到你应用就可以开始了,不懂的去看官网文档。在点击微信登录了调用以下方法
final SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "test";
api.sendReq(req);
授权成功后在WXEntryActivity.java 类里会调用onResp方法,这个时候微信登录就算成功了。这里我遇到了一个问题。登录一个界面,授权一个界面,WXEntryActivity又一个界面,这样看起来很不协调,我就想办法能不能一直在登录界面,让用户感觉只是拉起了一个授权界面。然后我在WXEntryActivity类里写了一个回调方法,回调到登录界面,意思也就是让WXEntryActivity在onResp接受到信息后发消息给登录界面获得到的code.然后马上finish掉WXEntryActivity类。让登录界面去完全后续的请求。这样就让用户感觉全部操作都在同一个界面操作的,无缝链接吧!我是这样做的。先定义一个回调接口
/**
* 微信授权登录回调函数
* @author Administrator
*
*/
public interface WxCallBack {
public void sendcode(String code,int mode);
}
然后在登录界面实现这个接口
<pre name="code" class="java">public class LoginActivity extends BaseActivity implements OnClickListener,WxCallBack{
........
MyApplication.Login(LoginActivity.this);//在myapplication保存LoginActivity对象,方便WXEntryActivity引用
@Override
public void sendcode(String code, int mode) {
// TODO Auto-generated method stub
Log.i("TGA", "code=="+code+",mode=="+mode);
getwxtoken(code, 1);
}
}
然后就是在WXEntryActivity类onResp方法调用
((LoginActivity) MyApplication.loginContext).sendcode(code, 1);
finish();
这样写下来还有点小瑕疵,WXEntryActivity类finish的时候会有闪屏的效果。这样体验很不好,然后在配置文件加上这句
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
这样就完美实现微信登录只在登录界面操作的效果!
有不懂的可以留言