我记得上一次使用 Mob 还是在 2017年 的时候,当时可能是做了一个分享的功能,一回头都过去5年多了… 没想到新公司的新项目,沿用的是 Mob 提供的 三方登录三方分享 ,有些怀念的感觉,所以记录一下逝去的时光 ~

一切均以 Mob 官方文档 为准,毕竟作为开发者要按照平台要求去集成

  • 平台注册 - 配置信息
  • 项目实战 - 开始集成
    • gradle 配置
    • 代码混淆
    • 实战使用
      • 三方登陆
      • 三方分享
      • 封装工具
      • 使用方式

平台注册 - 配置信息

  1. 在 Mob 找到技术文档 - 开始集成指导

  1. Mob 文档中心 - 集成ShareSDK

  1. 创建应用

将我们的应用首先注册到Mob平台,因为SDK初始化时需要提供这些配置信息 - 内部包含:AppID、AppSecret

创建 - 结果示例

内部包含:AppID、AppSecret

  1. 第三方平台注册指南

不论是三方登录、三方分享,本质都是我们app需要跳转到三方,调用一些数据或者功能,所以需要注册三方平台的账户,例如QQ、微信等等 → 请到对应的三方平台进行账户、应用注册

创建 - 结果示例

内部包含:AppID、AppSecret


项目实战 - 开始集成

关于通过Mob集成三方的方式,主要以 快速开始 - Android快速集成、客户端SDK - 集成指南 为准!!!

此篇生效结果时间 - 2022年8月19日

在集成的过程中,官网提供这张图挺形象的,有利于了解其背后的实现过程

gradle 配置

  1. build.gradle(Project)
buildscript {repositories {// 1.添加MobSDK Maven地址maven {url "https://mvn.mob.com/android"}...}dependencies {...// 2.注册MobSDKclasspath "com.mob.sdk:MobSDK:2018.0319.1724"}
}
  1. build.gradle(app)
//userName是小程序的原始ID,path是小程序内的页面路径;(提示:如果不需要可直接删除)
MobSDK {appKey "mob注册app的key"appSecret "mob注册app的appSecret"ShareSDK {loopShare trueffmpeg truedevInfo {Wechat {id 1sortId 1appId "微信注册app的key"appSecret "微信注册app的appSecret"callbackUri "http://sharesdk.cn"userName "小程序的原始ID"path "小程序内的页面路径"withShareTicket trueminiprogramType 0bypassApproval falseenable true}}}
}
  1. gradle.properties中添加代码
 MobSDK.spEdition=FP

图示

代码混淆

ShareSDK已经做了混淆处理,再次混淆会导致不可预期的错误,请在你的混淆脚本中添加如下的配置,跳过对ShareSDK的混淆操作

实战使用

我们经常集成三方平台的SDK,大多都是Application内进行初始化,但是Mob这方便可能有点小不同

Android这些年对用户的隐私保护越来越高,对开发的兼容适配要求也越来越高,所以在调用 Mob SDK 前,最好让用户确定隐私授权Mob 是这样告知告知开发者的

接口调用
回传用户隐私授权结果(submitPolicyGrantResult
为保证您的App在集成MobSDK之后能够满足工信部相关合规要求,您应确保App安装首次冷启动且取得用户阅读您《隐私政策》授权之后,调用MobSDK.submitPolicyGrantResult回传隐私协议授权结果
反之,如果用户不同意您App《隐私政策》授权,则不能调用MobSDK.submitPolicyGrantResult回传隐私协议授权结果。 相关隐私声明请参考合规指南

故我认知为有以下几个场景可以直接进行MobSDK.submitPolicyGrantResult初始化

  • 用户同意隐私协议后设置 MobSDK.submitPolicyGrantResult(true);

  • Application 内直接设置 MobSDK.submitPolicyGrantResult(true);
  • 调用三方登录、三方分享时设置 MobSDK.submitPolicyGrantResult(true);
三方登陆

mob的三方登陆可以直接 → 在鉴权完成之后,获取到用户信息,以及 token

    /*** mob 微信登录* */fun weChatMobLogin(context: Activity, listener: WxListener) {/*** 回传用户隐私授权结果* @param isGranted     用户是否同意隐私协议* @param callback      接口执行结果,可为null* 如果已经在其他地方进行过初始化,则可以删除此行,主要为了避免问题*/MobSDK.submitPolicyGrantResult(true, null)//获取设置对应的对应平台(这里是微信)val wechat = ShareSDK.getPlatform(Wechat.NAME)//判定客户端是否可用if (wechat.isClientValid) {//客户端可用Log.d("ShareSDK", "可用客户端")}else{Toast.makeText(context, "微信未安装,请先安装微信", Toast.LENGTH_LONG).show();}//判断指定平台是否已经完成授权if (wechat.isAuthValid) {wechat.removeAccount(true);}wechat.platformActionListener = object : PlatformActionListener {override fun onComplete(platform: Platform, i: Int, hashMap: HashMap<String?, Any?>?) {listener.onComplete(platform.db.token)/*platform.getDb().exportData()获取用户公共信息*/Log.d("ShareSDK", "onComplete ---->  登录成功" + platform.db.exportData())}override fun onError(platform: Platform?, i: Int, throwable: Throwable) {Log.d("ShareSDK", "onError ---->  登录失败$throwable")Log.d("ShareSDK", "onError ---->  登录失败" + throwable.stackTrace.toString())Log.d("ShareSDK", "onError ---->  登录失败" + throwable.message)}override fun onCancel(platform: Platform?, i: Int) {Log.d("ShareSDK", "onCancel ---->  登录取消")}}//单点登录,设置为false,优先采用客户端授权wechat.SSOSetting(false)//获取(指定账号)用户信息,直接设置成nullwechat.showUser(null)//抖音登录适配安卓9.0ShareSDK.setActivity(context);//获取登录用户的信息,如果没有授权,会先授权,然后获取用户信息wechat.authorize()}
三方分享

内部的俩个方法没啥区别,都能用

   /*** 微信示例 - 自我测试示例* */fun shareWx() {val sp = Platform.ShareParams()sp.title = "测试分享的标题"sp.titleUrl = "http://sharesdk.cn" // 标题的超链接sp.text = "测试分享的文本"sp.imageUrl = "http://www.someserver.com/测试图片网络地址.jpg"sp.site = "发布分享的网站名称"sp.siteUrl = "发布分享网站的地址"val wx = ShareSDK.getPlatform(Wechat.NAME)// 设置分享事件回调(注:回调放在不能保证在主线程调用,不可以在里面直接处理UI操作)wx.platformActionListener = object : PlatformActionListener {override fun onError(arg0: Platform, arg1: Int, arg2: Throwable) {// 分享失败的回调,arg:平台对象,arg1:表示当前的动作(9表示分享),arg2:异常信息Log.d("ShareSDK", "分享失败的回调")}override fun onComplete(arg0: Platform?,arg1: Int,p2: java.util.HashMap<String, Any>?,) {// 分享成功的回调Log.d("ShareSDK", "分享成功的回调")}override fun onCancel(arg0: Platform, arg1: Int) {// 取消分享的回调Log.d("ShareSDK", "取消分享的回调")}}// 执行图文分享wx.share(sp)}/*** 微信分享(项目所用) - mob客户提供 * */fun wechatShare() {//隐私协议授权 MobSDK.submitPolicyGrantResult(true);val sp = Platform.ShareParams()sp.title = "开心就好"sp.text = "测试"sp.url = "http://f.moblink.mob.com/pro/scene/novel/?id=0&mobid=7670310798648901632""sp.imageUrl = "分享图片.png"//分享图片的类型webp 缩略图sp.shareType = Platform.SHARE_WEBPAGE//分享的平台,此处为微信val WX = ShareSDK.getPlatform(Wechat.NAME)//分享回调WX.platformActionListener = object : PlatformActionListener {override fun onComplete(platform: Platform?,i: Int,hashMap: java.util.HashMap<String?, Any?>?,) {Log.d("ShareSDK", "onComplete ---->  分享成功")}override fun onError(platform: Platform, i: Int, throwable: Throwable) {Log.d("ShareSDK", "onError ---->  分享失败" + throwable.stackTrace.toString())Log.d("ShareSDK", "onError ---->  分享失败" + throwable.message)}override fun onCancel(platform: Platform, i: Int) {Log.d("ShareSDK", "onCancel ---->  分享取消")}}//分享WX.share(sp)}
封装工具
package com.xxx.xx.utilsimport android.app.Activity
import android.content.Context
import android.util.Log
import android.widget.Toast
import cn.sharesdk.framework.Platform
import cn.sharesdk.framework.PlatformActionListener
import cn.sharesdk.framework.ShareSDK
import cn.sharesdk.onekeyshare.OnekeyShare
import cn.sharesdk.wechat.friends.Wechat
import com.mob.MobSDKobject WxPlatformUtil {interface WxListener {fun onComplete(code:String)}/*** mob 微信登录* */fun weChatMobLogin(context: Activity, listener: WxListener) {/*** 回传用户隐私授权结果* @param isGranted     用户是否同意隐私协议* @param callback      接口执行结果,可为null*/MobSDK.submitPolicyGrantResult(true, null)val wechat = ShareSDK.getPlatform(Wechat.NAME)//判定客户端是否可用if (wechat.isClientValid) {//客户端可用Log.d("ShareSDK", "可用客户端")}else{Toast.makeText(context, "微信未安装,请先安装微信", Toast.LENGTH_LONG).show();}//判断指定平台是否已经完成授权if (wechat.isAuthValid) {wechat.removeAccount(true);}wechat.platformActionListener = object : PlatformActionListener {override fun onComplete(platform: Platform, i: Int, hashMap: HashMap<String?, Any?>?) {listener.onComplete(platform.db.token)/*platform.getDb().exportData()获取用户公共信息*/Log.d("ShareSDK", "onComplete ---->  登录成功" + platform.db.exportData())}override fun onError(platform: Platform?, i: Int, throwable: Throwable) {Log.d("ShareSDK", "onError ---->  登录失败$throwable")Log.d("ShareSDK", "onError ---->  登录失败" + throwable.stackTrace.toString())Log.d("ShareSDK", "onError ---->  登录失败" + throwable.message)}override fun onCancel(platform: Platform?, i: Int) {Log.d("ShareSDK", "onCancel ---->  登录取消")}}//单点登录,设置为false,优先采用客户端授权wechat.SSOSetting(false)//获取(指定账号)用户信息,直接设置成nullwechat.showUser(null)//抖音登录适配安卓9.0ShareSDK.setActivity(context);//获取登录用户的信息,如果没有授权,会先授权,然后获取用户信息wechat.authorize()}/*** 微信示例 - 自我测试示例* */fun shareWx() {val sp = Platform.ShareParams()sp.title = "测试分享的标题"sp.titleUrl = "http://sharesdk.cn" // 标题的超链接sp.text = "测试分享的文本"sp.imageUrl = "http://www.someserver.com/测试图片网络地址.jpg"sp.site = "发布分享的网站名称"sp.siteUrl = "发布分享网站的地址"val wx = ShareSDK.getPlatform(Wechat.NAME)// 设置分享事件回调(注:回调放在不能保证在主线程调用,不可以在里面直接处理UI操作)wx.platformActionListener = object : PlatformActionListener {override fun onError(arg0: Platform, arg1: Int, arg2: Throwable) {// 分享失败的回调,arg:平台对象,arg1:表示当前的动作(9表示分享),arg2:异常信息Log.d("ShareSDK", "分享失败的回调")}override fun onComplete(arg0: Platform?,arg1: Int,p2: java.util.HashMap<String, Any>?,) {// 分享成功的回调Log.d("ShareSDK", "分享成功的回调")}override fun onCancel(arg0: Platform, arg1: Int) {// 取消分享的回调Log.d("ShareSDK", "取消分享的回调")}}// 执行图文分享wx.share(sp)}/*** 微信分享 - mob客户提供 用了* */var shareUrl = "http://f.moblink.mob.com/pro/scene/novel/?id=0&mobid=7670310798648901632"//通过微信分享链接fun wechatShare() {MobSDK.submitPolicyGrantResult(true);val sp = Platform.ShareParams()//sp.text = "测试"sp.title = "开心就好"sp.url = shareUrlsp.imageUrl = "分享图片.png"sp.shareType = Platform.SHARE_WEBPAGEval WX = ShareSDK.getPlatform(Wechat.NAME)WX.platformActionListener = object : PlatformActionListener {override fun onComplete(platform: Platform?,i: Int,hashMap: java.util.HashMap<String?, Any?>?,) {Log.d("ShareSDK", "onComplete ---->  分享成功")}override fun onError(platform: Platform, i: Int, throwable: Throwable) {Log.d("ShareSDK", "onError ---->  分享失败" + throwable.stackTrace.toString())Log.d("ShareSDK", "onError ---->  分享失败" + throwable.message)}override fun onCancel(platform: Platform, i: Int) {Log.d("ShareSDK", "onCancel ---->  分享取消")}}WX.share(sp)}/*** 自找平台分享方法 - 备用* */private fun showShare(platform: String?) {val oks = OnekeyShare()//指定分享的平台,如果为空,还是会调用九宫格的平台列表界面if (platform != null) {oks.setPlatform(platform)}// title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用oks.setTitle("标题")// titleUrl是标题的网络链接,仅在Linked-in,QQ和QQ空间使用oks.setTitleUrl("http://sharesdk.cn")// text是分享文本,所有平台都需要这个字段oks.text = "我是分享文本"//分享网络图片,新浪微博分享网络图片需要通过审核后申请高级写入接口,否则请注释掉测试新浪微博oks.setImageUrl("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg")// url仅在微信(包括好友和朋友圈)中使用oks.setUrl("http://sharesdk.cn")//启动分享oks.show(MobSDK.getContext())}}
使用方式
  • 三方登陆
   WxPlatformUtil.weChatMobLogin(this,object : WxPlatformUtil.WxListener {override fun onComplete(code: String) {code.isNullOrEmpty().let {if (!it){//这里逻辑自己定义就好mViewModel.wxLogin(code)}}}})
  • 三方分享
  WxPlatformUtil.wechatShare()

Mob ShareSdk 三方登录、三方分享相关推荐

  1. Android友盟集成QQ、微信、微博等第三方登录与分享

    前言 最近项目需要加入第三方分享和登录功能,之前其他项目的第三方分享和登录一直都使用ShareSDK实现的.为了统一使用友盟的全家桶,所以三方分享和登录也就选择了友盟.这里记录一下完整的集成与使用流程 ...

  2. ios-第三方登录和分享总结(微信篇)

    对于第三方登录和分享,当我们做熟了就会发现三种登录和分享的方式都是大同小异,流程基本上也一样,只要我们掌握其中的一种,其他的只需要看看文档就会很快做完,下面我们就先介绍微信. 一 微信 1.1微信登录 ...

  3. 友盟三方登录,分享,推送demo

    前一段时间项目中使用到了友盟的一些功能,自己做了一个小demo,已经上传,今天有空,给大家讲解一下吧. 首先下载最新的友盟sdkhttp://dev.umeng.com/social/android/ ...

  4. OAuth协议(三方登录授权)

    1.什么是三方登录? 三方登录就是通过第三方应用程序的账号密码, 快速的获取用户相关的信息实现登录 例如: QQ登录 点击QQ登录按钮之后,就会要求用户输入QQ的账号和密码 只要用户输入了QQ的账号和 ...

  5. 全军尽墨的Android应用:社会化授权登录及分享安全漏洞

    随着微信微博等社会化媒体的火热,第三方登录迅速成为一种快捷注册的方式,社会化分享也成为一种知识快速传播的渠道.在移动端,几乎大多数应用都接入了第三方登录或者分享组件,尤其是微信.QQ.微博三大巨头.这 ...

  6. Android 集成ShareSDK实现三方登录

    ** 前言 ** 三方登录在如今差不多已经成为每一款App必备的功能了.每次集成都会遇到各种各样的问题,今天总结一下三方登录的流程,以免忘记.现在好像还没有专门的三方登录SDK,ShareSDK和友盟 ...

  7. 使用ShareSDK完成第三方(QQ、微信、微博)登录和分享

    这几天遇到一个需求:做第三方登录和分享.遇到了一些坑,把整个过程整理记录下来,方便他人,同时也捋一下思路. 当时考虑过把每个平台的SDK下载下来,一个一个弄,一番取舍后决定还是用ShareSDK.这里 ...

  8. [OAuth2.0三方登录系列文章-1]OAuth2.0与三方登录的端到端方案

    系列文章 [OAuth2.0三方登录系列文章-1]OAuth2.0与三方登录的端到端方案 [OAuth2.0三方登录系列文章-2]如何设计基于OAuth2.0的授权登录SDK以及竞品分析 [OAuth ...

  9. 使用ShareSDK进行第三方(登录,分享)

    最近项目需要做第三方登录和分享,我刚开始接触的时候花了 一些时间才搞清楚 ,我使用的是ShareSDK 我把它整理下来,希望能帮助他人,如果写的不好,请见谅 1.去Mob官网注册一个帐号(注册步骤省略 ...

最新文章

  1. Android新手系列教程(申明:来源于网络)
  2. Sum All Primes
  3. Acwing第 26 场周赛【完结】
  4. android 许可协议,Android 基本控件的使用二(注册许可协议)(CheckBox)
  5. LeetCode 36 有效的数独
  6. python社区版可以用库么_应用Python,你不但能够得到出色的小区适用和普遍的库集...
  7. ADO.NET常用对象详解之:DataAdapter对象
  8. KVM console 连接虚拟机注意的位置
  9. 对缓存的思考——提高命中率
  10. 知乎_线程和进程的区别是什么?
  11. Win10修改注册表,提示无法创建密钥
  12. 网易云音乐——网易云云盘上传音乐自动改名的解决方法
  13. vlfeat matlab怎么用,VLFeat在matlab中的使用
  14. 小米电纸书MiReader安装微信读书
  15. Springboot实现QQ授权登录
  16. python死循环_Python for死循环
  17. 网络带宽的检测工具介绍
  18. 基于LVD、贝叶斯模型算法实现的电商行业商品评论与情感分析案例
  19. 笨方法学python40-42
  20. 第十三届 蓝桥杯 单片机设计与开发项目 省赛

热门文章

  1. xml,json,html格式化工具
  2. 基蛋生物PLM项目正式进入实施阶段
  3. BugkuCTF-WEB-第43题到第52题
  4. JavaScript 打印 使用 Lodop
  5. I2C接口的OLED在树莓派3上的应用(luma.oled驱动)
  6. 网络设备及网络常用概念(交换机,路由器,ip等)基础知识
  7. 海外网红营销:揭秘KOL和KOC的本质区别与市场影响力
  8. java计算机毕业设计体育用品购物系统源码+系统+数据库+lw文档
  9. 数字逻辑电路与系统 课程设计:基于FPGA的乒乓球游戏
  10. r语言x=c(1 0.8),R语言求根