美文网首页
实现Mob的微信登录,QQ登录,分享,

实现Mob的微信登录,QQ登录,分享,

作者: Tyhj | 来源:发表于2018-01-24 14:07 被阅读0次

    原文:https://www.zybuluo.com/Tyhj/note/730547
    最近用到支持第三方登录和分享,之前其实也做过了,使用的是友盟的SDK,所以这次想试试Mob的,毕竟有免费的那个短信验证

    首先说一下那个分享吧:

    很简单,直接用sdk自带的,相当于一个dialog就可以用了,界面也不差。但是要去每一个平台去创建应用,申请APPKey和AppSecret,没什么难的,就是别忘了添加代码混淆规则。

    private void showShare() {
            OnekeyShare oks = new OnekeyShare();
            //关闭sso授权
            oks.disableSSOWhenAuthorize();
            // title标题,印象笔记、邮箱、信息、微信、人人网、QQ和QQ空间使用
            oks.setTitle("聚宝籍");
            // titleUrl是标题的网络链接,仅在Linked-in,QQ和QQ空间使用
            oks.setTitleUrl(getString(R.string.url_share_app));
            // text是分享文本,所有平台都需要这个字段
            oks.setText(getString(R.string.its_signature));
            //分享网络图片,新浪微博分享网络图片需要通过审核后申请高级写入接口,否则请注释掉测试新浪微博
            oks.setImageUrl(getString(R.string.logo));
            // imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
            //oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片
            // url仅在微信(包括好友和朋友圈)中使用
            oks.setUrl(getString(R.string.url_share_app));
            // comment是我对这条分享的评论,仅在人人网和QQ空间使用
            //oks.setComment("我是测试评论文本");
            // site是分享此内容的网站名称,仅在QQ空间使用
            oks.setSite("聚宝籍");
            // siteUrl是分享此内容的网站地址,仅在QQ空间使用
            oks.setSiteUrl(getString(R.string.url_share_app));
    
    // 启动分享GUI
            oks.show(this);
        }
    

    对于登录就麻烦了

    首先要去微信申请那个登录权限,要Money的。
    然后注意一点是,登录回调反馈

    <!-- 微信分享回调 -->
            <activity
                android:name=".wxapi.WXEntryActivity"
                android:configChanges="keyboardHidden|orientation|screenSize"
                android:exported="true"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Translucent.NoTitleBar" />
                
                
    
    
    //对于QQ
    <activity
                android:name="com.mob.tools.MobUIShell"
                android:configChanges="keyboardHidden|orientation|screenSize"
                android:screenOrientation="portrait"
                android:theme="@android:style/Theme.Translucent.NoTitleBar"
                android:windowSoftInputMode="stateHidden|adjustResize">
                <intent-filter>
                //重点在这里,这个要改
                    <data android:scheme="tencent1106041134" />
                    <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>
    

    然后就是授权和取消授权的问题,已授权的话不会跳到授权那个页面去的,所以每次授权的时候判断一下,如果已授权的话就撤销一下授权。对于微信还必须以正式签名打包安装才可以成功。

    weixinfd = ShareSDK.getPlatform(Login.this,Wechat.NAME);
            weixinfd.setPlatformActionListener(this); // 设置分享事件回调
            if(weixinfd.isAuthValid()){
                weixinfd.removeAccount(true);
            }
            weixinfd.SSOSetting(false);  //设置false表示使用SSO授权方式
            weixinfd.showUser(null);//授权并获取用户信息
            
            
            
            
    //回调监听
            @Override
        public void onComplete(Platform platform, int i, HashMap<String, Object> res) {
            //获取资料
            String name=platform.getDb().getUserName();//获取用户名字
            String avatar=platform.getDb().getUserIcon(); //获取用户头像
            String unionid = (String) res.get("unionid");
            //Log.e("成功","微信登录:"+"unionid:"+unionid+" name"+name+"avatar:"+avatar);
        
        }
    
        @Override
        public void onError(Platform platform, int i, Throwable throwable) {
            toast("失败");
        }
    
        @Override
        public void onCancel(Platform platform, int i) {
            Log.e("取消","xxx");
        }
            
    

    其中那个反馈只有onCancel在Ui线程中吧,其他的都是在子线程中返回的。

    相关文章

      网友评论

          本文标题:实现Mob的微信登录,QQ登录,分享,

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