[关闭]
@Tyhj 2017-04-21T08:22:41.000000Z 字数 2833 阅读 2562

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

Android


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

首先说一下那个分享吧:

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

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

对于登录就麻烦了

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

  1. <!-- 微信分享回调 -->
  2. <activity
  3. android:name=".wxapi.WXEntryActivity"
  4. android:configChanges="keyboardHidden|orientation|screenSize"
  5. android:exported="true"
  6. android:screenOrientation="portrait"
  7. android:theme="@android:style/Theme.Translucent.NoTitleBar" />
  8. //对于QQ
  9. <activity
  10. android:name="com.mob.tools.MobUIShell"
  11. android:configChanges="keyboardHidden|orientation|screenSize"
  12. android:screenOrientation="portrait"
  13. android:theme="@android:style/Theme.Translucent.NoTitleBar"
  14. android:windowSoftInputMode="stateHidden|adjustResize">
  15. <intent-filter>
  16. //重点在这里,这个要改
  17. <data android:scheme="tencent1106041134" />
  18. <action android:name="android.intent.action.VIEW" />
  19. <category android:name="android.intent.category.BROWSABLE" />
  20. <category android:name="android.intent.category.DEFAULT" />
  21. </intent-filter>
  22. <!-- 调用新浪原生SDK,需要注册的回调activity -->
  23. <intent-filter>
  24. <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
  25. <category android:name="android.intent.category.DEFAULT" />
  26. </intent-filter>
  27. </activity>

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

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

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

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注