美文网首页Weex
weex☞友盟三方登陆

weex☞友盟三方登陆

作者: 小学生的博客 | 来源:发表于2018-12-03 14:30 被阅读4次

友盟三方登录、获取通讯录、扫码、打开相册、拍照等操作,都是一个套路,就是创建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 => {
                   ...
                })

相关文章

网友评论

    本文标题:weex☞友盟三方登陆

    本文链接:https://www.haomeiwen.com/subject/gaeycqtx.html