这几天集成了微信登陆,有点麻烦,刚开始我集成的ShareSDK的分享,然后继承友盟的微信登陆,可是好像发生点冲突,所以我又重新继承了ShareSDK的微信登陆。现在我说一下步骤吧!
下面的步骤我是获取微信的AppID和AppSecret
1. 先到微信开放平台(https://open.weixin.qq.com/)申请一个账户(最好让公司申请一个账户,因为后面还要申请开发者资质,需要花钱)。
2. 申请完账户以后,到管理中心,创建一个新的应用,然后会填写名称,介绍等等乱七八糟的,然后会让你上传两个应用图标,点击下一步就行,然后会填写官网,应用下载地址(这里可以为空),还有应用签名等等,这里我会说一下应用签名,应用签名是指你的App打包后安装在手机上会生成一个MD5的值,你将应用安装到手机上后,可以利用一个工具获取(工具地址:https://res.wx.qq.com/open/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android2.apk)。
3. 接下来就是等审核通过,大概七天以内吧,通过后你还得申请开通App登陆功能,需要花钱的。
4. 接下来按照ShareSDK的第三方登陆的步骤走就行了,里面主要代码说明不够详细,你需要参照一下DEMO(DEMO的地址为https://github.com/ShareSDKPlatform/ThirdPartyLoginDemo),主要是参照下面的代码,将下面的代码复制粘贴到登陆界面就OK了
package cn.sharesdk.demo.tpl;
import java.util.HashMap;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler.Callback;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Toast;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.wechat.friends.Wechat;
import com.mob.tools.utils.UIHandler;
public class LoginActivity extends Activity implements Callback,
OnClickListener, PlatformActionListener {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ShareSDK.initSDK(this);
setContentView(R.layout.third_party_login_page);
findViewById(R.id.wechat).setOnClickListener(this);
//findViewById(R.id.tvQq).setOnClickListener(this);
}
public void onClick(View v) {
switch(v.getId()) {
case R.id.wechat: {
Platform weixinfd = ShareSDK.getPlatform(Wechat.NAME);
weixinfd.setPlatformActionListener(this);
if (weixinfd.isValid ()){
weixinfd.removeAccount();
}
weixinfd.showUser(null);
}
}
}
// 回调
@Override
public void onCancel(Platform platform, int action) {
Message msg = new Message();
msg.what = MSG_ACTION_CCALLBACK;
msg.arg1 = 3;
msg.arg2 = action;
msg.obj = platform;
UIHandler.sendMessage(msg, this);
}
@Override
public void onComplete(Platform platform, int action,
HashMap<String, Object> res) {
Message msg = new Message();
msg.what = MSG_ACTION_CCALLBACK;
msg.arg1 = 1;
msg.arg2 = action;
msg.obj = platform;
UIHandler.sendMessage(msg, this);
System.out.println(res);
//获取资料
platform.getDb().getUserName();//获取用户名字
platform.getDb().getUserIcon(); //获取用户头像
String token = platform.getDb().getToken();
System.out.println("token==="+token);
String unionid = (String) res.get("unionid");
System.out.println("unionid==="+unionid);
}
@Override
public void onError(Platform platform, int action, Throwable t) {
t.printStackTrace();
Message msg = new Message();
msg.what = MSG_ACTION_CCALLBACK;
msg.arg1 = 2;
msg.arg2 = action;
msg.obj = t;
UIHandler.sendMessage(msg, this);
// 分享失败的统计
ShareSDK.logDemoEvent(4, platform);
}
// 回调handleMessage
@Override
public boolean handleMessage(Message msg) {
switch (msg.arg1) {
case 1: {
// 成功
Toast.makeText(LoginActivity.this, "成功", Toast.LENGTH_SHORT).show();
}
break;
case 2: {
// 失败
Toast.makeText(LoginActivity.this, "失败", Toast.LENGTH_SHORT).show();
String expName = msg.obj.getClass().getSimpleName();
if ("WechatClientNotExistException".equals(expName)
|| "WechatTimelineNotSupportedException".equals(expName)
|| "WechatFavoriteNotSupportedException".equals(expName)) {
Toast.makeText(LoginActivity.this, "请安装微信客户端", Toast.LENGTH_SHORT).show();
}
}
break;
case 3: {
// 取消
Toast.makeText(LoginActivity.this, "取消····", Toast.LENGTH_SHORT)
.show();
}
break;
}
return false;
}
}