package com.zhan_dui.auth; import android.content.Context; import android.content.SharedPreferences; import android.os.Handler; import android.preference.PreferenceManager; import com.avos.avoscloud.AVException; import com.avos.avoscloud.AVObject; import com.avos.avoscloud.AVQuery; import com.avos.avoscloud.FindCallback; import com.avos.avoscloud.SaveCallback; import com.umeng.analytics.MobclickAgent; import java.util.HashMap; import java.util.List; import cn.sharesdk.framework.Platform; import cn.sharesdk.framework.PlatformActionListener; import cn.sharesdk.framework.ShareSDK; public class SocialPlatform implements PlatformActionListener { private Context mContext; private Platform mSocialPlatform; private Handler mHandler; private SharedPreferences mSharedPreferences; public static final int AUTH_CANCEL = 0; public static final int AUTH_SUCCESS = 5; public static final int AUTH_FAILED = 10; public static final int AUTH_SAVE_FAILED = 15; public SocialPlatform(Context context) { ShareSDK.initSDK(context); mContext = context; mSharedPreferences = PreferenceManager .getDefaultSharedPreferences(mContext); } public void auth(String PlatformName, Handler handler) { mHandler = handler; mSocialPlatform = ShareSDK.getPlatform(mContext, PlatformName); mSocialPlatform.setPlatformActionListener(this); mSocialPlatform.authorize(); } private void saveInformation(final Platform platform, boolean update, AVObject toUpdateobject) { final AVObject object; if (update) { object = toUpdateobject; } else { object = new AVObject("Users"); } object.setFetchWhenSave(true); object.put("username", platform.getDb().getUserName()); object.put("avatar", platform.getDb().getUserIcon()); object.put("uid", platform.getDb().getUserId()); object.put("platform", platform.getName()); object.put("others", platform.getDb().exportData()); object.saveInBackground(new SaveCallback() { @Override public void done(AVException err) { if (err == null) { mSharedPreferences .edit() .putString("objectid", object.getObjectId()) .putString("username", platform.getDb().getUserName()) .putString("avatar", platform.getDb().getUserIcon()) .putString("uid", platform.getDb().getUserId()) .putBoolean("login", true) .putString("platform", platform.getName()).commit(); MobclickAgent.onEvent(mContext, "login"); mHandler.sendEmptyMessage(AUTH_SUCCESS); } else { mHandler.sendEmptyMessage(AUTH_SAVE_FAILED); } } }); } @Override public void onCancel(Platform platform, int action) { mHandler.sendEmptyMessage(AUTH_CANCEL); } @Override public void onComplete(final Platform platform, int action, HashMap<String, Object> res) { AVQuery<AVObject> query = new AVQuery<AVObject>("Users"); query.whereEqualTo("platform", platform.getName()); query.whereEqualTo("uid", platform.getDb().getUserId()); query.setLimit(1); query.findInBackground(new FindCallback<AVObject>() { @Override public void done(List<AVObject> objects, AVException e) { if (e == null) { if (objects.size() > 0) { saveInformation(platform, true, objects.get(0)); } else { saveInformation(platform, false, null); } } else { mHandler.sendEmptyMessage(AUTH_SAVE_FAILED); } } }); } @Override public void onError(Platform platform, int action, Throwable throwable) { mHandler.sendEmptyMessage(AUTH_FAILED); } }