友盟三方登录、获取通讯录、扫码、打开相册、拍照等操作,都是一个套路,就是创建module,原生实现这些方法,前端调用是时候返回最终的结果。
可以先按照文档,使用原生Android实现登录操作(先不管什么包名之类的,使用官方先有的demo以及appkey进行操作)。然后在创建module,在application中配置,供前端调用时候返回数据。
如何引入就不在提了,直接创建创建三方登录的module
public class ThirdLogin extends WXModule {
protected JSCallback callback;
@JSMethod(uiThread = true)
public void qq(JSCallback callback) {
WXPageActivity act = (WXPageActivity) mWXSDKInstance.getContext();
umengDeleteOauth(SHARE_MEDIA.QQ);
//开始授权
shareLoginUmeng(act, SHARE_MEDIA.QQ,callback);
this.callback = callback;
}
@JSMethod(uiThread = true)
public void weixin(JSCallback callback) {
WXPageActivity act = (WXPageActivity) mWXSDKInstance.getContext();
umengDeleteOauth(SHARE_MEDIA.WEIXIN);
//开始授权
shareLoginUmeng(act, SHARE_MEDIA.WEIXIN,callback);
this.callback = callback;
}
@JSMethod(uiThread = true)
public void weibo(JSCallback callback) {
WXPageActivity act = (WXPageActivity) mWXSDKInstance.getContext();
umengDeleteOauth(SHARE_MEDIA.SINA);
//开始授权
shareLoginUmeng(act, SHARE_MEDIA.SINA,callback);
this.callback = callback;
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(mWXSDKInstance.getContext()).onActivityResult(requestCode, resultCode, data);
}
/**
* 友盟开始授权(登入)
*/
public static void shareLoginUmeng(final Activity activity, SHARE_MEDIA share_media_type, final JSCallback callback) {
UMShareAPI.get(activity).getPlatformInfo(activity, share_media_type, new UMAuthListener() {
@Override
public void onStart(SHARE_MEDIA share_media) {
Log.e("TAG", "onStart授权开始: ");
}
@Override
public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
//sdk是6.4.5的,但是获取值的时候用的是6.2以前的(access_token)才能获取到值,未知原因
String uid = map.get("uid");
String openid = map.get("openid");//微博没有
String unionid = map.get("unionid");//微博没有
String access_token = map.get("access_token");
String refresh_token = map.get("refresh_token");//微信,qq,微博都没有获取到
String expires_in = map.get("expires_in");
String name = map.get("name");//名称
String gender = map.get("gender");//性别
String iconurl = map.get("iconurl");//头像地址
callback.invoke(map);
}
@Override
public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
Toast.makeText(activity, "授权失败", Toast.LENGTH_LONG).show();
Log.e("TAG", "onError: " + "授权失败");
Object object = new Object();
callback.invoke(object);
}
@Override
public void onCancel(SHARE_MEDIA share_media, int i) {
Toast.makeText(activity, "授权取消", Toast.LENGTH_LONG).show();
Log.e("TAG", "onError: " + "授权取消");
Object object = new Object();
callback.invoke(object);
}
});
}
/**
* 友盟取消授权(登入)
*/
private void umengDeleteOauth(SHARE_MEDIA share_media_type) {
WXPageActivity act = (WXPageActivity) mWXSDKInstance.getContext();
UMShareAPI.get(mWXSDKInstance.getContext()).deleteOauth(act, share_media_type, new UMAuthListener() {
@Override
public void onStart(SHARE_MEDIA share_media) {
//开始授权
}
@Override
public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
//取消授权成功 i=1
}
@Override
public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
//授权出错
}
@Override
public void onCancel(SHARE_MEDIA share_media, int i) {
//取消授权
}
});
}
}
在WXApplication 引入即可。
public class WXApplication extends Application {
public static Context context;
@Override
public void onCreate() {
super.onCreate();
context = this;
//设置LOG开关,默认为false
UMConfigure.setLogEnabled(true);
UMConfigure.init(this,"xxxxxxxxxxxxxx"
,"umeng",UMConfigure.DEVICE_TYPE_PHONE,"");
WXSDKEngine.addCustomOptions("appName", "WXSample");
WXSDKEngine.addCustomOptions("appGroup", "WXApp");
WXSDKEngine.initialize(this,
new InitConfig.Builder().setImgAdapter(new ImageAdapter()).build()
);
try {
WXSDKEngine.registerModule("event", WXEventModule.class);
WXSDKEngine.registerModule("thirdLogin", ThirdLogin.class);
} catch (WXException e) {
e.printStackTrace();
}
AppConfig.init(this);
WeexPluginContainer.loadAll(this);
}
//可以参考官方demo
{
PlatformConfig.setWeixin("wxdc1e388c3822xxxx", "3baf1193c85774b3fd9d18447d76xxx");
PlatformConfig.setQQZone("10042446xx8", "c7394704798a158208a74ab60104f0bxxa");
PlatformConfig.setSinaWeibo("39217xx00954", "04b48b094faeb16683c32669824ebdad", "http://sns.whalecloud.com/sina2/callback");
}
}
前端调用
const thirdLogin= weex.requireModule('thirdLogin')
... //在方法中直接使用就行了
thirdLogin.qq(res => {
...
})
网友评论