第一步:下载SDK:http://www.mob.com/#/downloadDetail/ShareSDK/android,选择自己要集成的平台,下载
解压文件,打开ShareSDK for Android文件夹,运行QuickIntegrater.jar,选择需要的内容。会生成Sample文件夹
第二步:将assets,libs,res内容复制到项目中,只集成登录src下的文件只需要Sample\src\cn\sharesdk\demo\wxapi的WXEntryActivity.java文件,复制到项目中(assets应该在main下面,和java,res并列)
第三步:复制权限
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
第四步:添加activity
<activity
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" >
<intent-filter>
<data android:scheme="tencent100371282" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<!-- 调用新浪原生SDK,需要注册的回调activity -->
<intent-filter>
<action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<!-- 微信分享回调-->
<activity android:name=".wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
第五步:更改assets下ShareSDK的appkey,qq空间,微信,微博 (RedirectUrl必须和微博注册的回调一样)
第六步:在activity内实现
PlatformActionListener,Handler.Callback接口
点击事件调用private static final int MSG_USERID_FOUND = 1;//用户已经存在 private static final int MSG_LOGIN = 2;//登录中 private static final int MSG_AUTH_CANCEL = 3;//取消授权 private static final int MSG_AUTH_ERROR = 4;//授权出错 private static final int MSG_AUTH_COMPLETE = 5;//授权成功 private HashMap<String, Object> mapQQ = new HashMap<>();//授权信息 private HashMap<String, Object> mapSina = new HashMap<>();//授权信息 private HashMap<String, Object> mapWeChat = new HashMap<>();//授权信息
/** * 用于授权 * * @param plat */ private void authorize(Platform plat) { //如果用户已经授权过,用户信息还存在,将执行if语句 plat.removeAccount();//第一次授权后之后下面的方法会不显示授权页面,所以添加这一句,每次都显示授权页面 //也可以删除下面的if语句,如果需要不显示可以添加
if (plat.isValid()) { String userId = plat.getDb().getUserId(); if (!TextUtils.isEmpty(userId)) { UIHandler.sendEmptyMessage(MSG_USERID_FOUND, this); if (plat.getName().equals("QQ")) { login(plat.getName()); } else if (plat.getName().equals("SinaWeibo")) { login(plat.getName()); } else if (plat.getName().equals("Wechat")) { login(plat.getName()); } return; } } //授权监听 plat.setPlatformActionListener(this); plat.SSOSetting(false); plat.showUser(null); dialog=new ProgressDialog(this);//qq授权在授权页面关闭后,很久才会提示授权成功,所以需要显示一
个加载中的dialog dialog.show(); }
/** * 正在登录中 * * @param plat */ private void login(String plat) { Message msg = new Message(); msg.what = MSG_LOGIN; msg.obj = plat; UIHandler.sendMessage(msg, this); dialog.dismiss(); finish(); }
@Override public void onComplete(Platform platform, int action, HashMap<String, Object> res) { if (action == Platform.ACTION_USER_INFOR) { if (platform.getName().equals("QQ")) { mapQQ.clear(); mapQQ = res; String openId = platform.getDb().getUserId();//qq的用户id } else if (platform.getName().equals("SinaWeibo")) { mapSina.clear(); mapSina = res; String openId = platform.getDb().getUserId();//微博的 } else if (platform.getName().equals("Wechat")) { mapWeChat.clear(); mapWeChat = res; String unionid = platform.getDb().get("unionid");//微信的用户id } UIHandler.sendEmptyMessage(MSG_AUTH_COMPLETE, this); } } @Override public void onError(Platform platform, int action, Throwable throwable) { if (action == Platform.ACTION_USER_INFOR) { UIHandler.sendEmptyMessage(MSG_AUTH_ERROR, this); } throwable.printStackTrace(); dialog.dismiss(); } @Override public void onCancel(Platform platform, int action) { if (action == Platform.ACTION_USER_INFOR) { UIHandler.sendEmptyMessage(MSG_AUTH_CANCEL, this); } dialog.dismiss(); } @Override public boolean handleMessage(Message msg) { switch (msg.what) { case MSG_USERID_FOUND: UtilToast.show(this,getResources().getText(R.string.login_userexists)); break; case MSG_LOGIN: // UtilToast.show(this, getString(0, msg.obj)); break; case MSG_AUTH_CANCEL: UtilToast.show(this,getResources().getText(R.string.login_unauthorize)); break; case MSG_AUTH_ERROR: UtilToast.show(this,getResources().getText(R.string.login_authorizationerror)); break; case MSG_AUTH_COMPLETE: UtilToast.show(this,getResources().getText(R.string.login_authorizationsuccess)); break; } return false; }