原生三方登陆、分享、支付

改自https://github.com/shaohui10086/ShareUtil ,在其基础上添加些许功能及优化,改动如下:

    1. 使用rxjava2
    2. 添加小程序分享支持
    3. 部分代码优化
    4. 添加微信、支付宝支付,避免主目录添加wx文件夹方式
    5. 同步更新微博官方分享支付(2018-6-22)
    6. 支持网络依赖
    7. 支持Instagram、Google、FaceBook、Twitter海外登录方式,调用方式一致

[图片上传失败...(image-940a56-1574735017959)]

TODO

  • 支持多图分享
  • 支持视频分享

ChangeLog

2019-11-26

  • 分享添加分享开始回调

2019-05-30

  • 添加并测试成功Twitter登录

2019-05-29

  • 添加并测试成功Instagram登录
  • 添加并测试成功FaceBook登录
  • 添加并测试成功Google登录

2019-05-23

  • 更新支付宝支付(修改为aar依赖方式)
  • 去除登录、分享、支付所产生的内存泄漏

2018-12-3

  • 统一provider authorities方便多provider并存
  • authorities 必须为 包名.file.provider

2018-11-28

  • 修复分享、登录、支付引发的内存泄漏
  • 登录结果回调新增登录失败code
  • 修复7.0无法调用系统分享问题

2018-08-27

  • 抽离出gradle基础配置,方便调用时更改

2018-07-27

  • 修复微信支付成功无法获取回调

2018-07-12

  • 修复QQ分享无法获取成功回调

2018-07-11

  • 兼容安卓8.0

2018-06-22

  • 去除银联支付
  • 重写微博分享登录
  • 支持资源图片分享
  • 修改shareActivity为透明

2018-05-07

  • 添加微信支付、支付宝支付

2018-04-29

  • 修复小程序无法分享问题
  • qq_id置于shareutil包中,引用时直接修改该值
  • 暴露直接分享接口,分享过程需对图片进行二次处理(添加水印或其他处理),分享时直接传入处理后的图片,并调用直接分享方法

2018-02-07

  • 改用rxjava2库,支持小程序分享功能

ShareUtil

ShareUtil是一个综合性的分享及登录工具库,
支持微信分享,微博分享,QQ分享,QQ空间分享以及Android系统默认分享,
分纯文字、纯图片、图文混合(支持小程序分享)分享方式
支持微信登录,微博登录以及QQ登录并获取用户信息。

Feature

  1. 多种分享方式: 纯文字、纯图片、图文混合

  2. 支持分享图片本地链接,网络链接或者Bitmap, 不需要考虑各个平台的不一致性。

  3. 支持微信、QQ、微博登录并获取登录用户信息

  4. 支持小程序分享

  5. 混淆代码见 example module下 混淆文件

Usage

使用配置

使用方式

  1. 项目主module中 build.gradle 添加如下代码
    defaultConfig {
        ...
        // 必须配置qqid 否则无法获取分享成功回调
        // 注:以下三个参数均为占位,里面的值随意
        manifestPlaceholders = [
                qq_id: "1106618327"
                FACEBOOK_APP_ID: "1106618327",
                FACEBOOK_SCHEME: "1106618327"
        ]
        ...
    }

    api 'com.nfleo:ShareLoginPayUtil:1.1.2'
  1. 项目build.gradle 中添加如下代码
    buildscript {
        repositories {
            jcenter()
            maven { url "https://dl.bintray.com/thelasterstar/maven/" }
        }
    }

    allprojects {
        repositories {
            maven {url "https://maven.google.com"}
            google()

            // 微博 SDK 所需的配置
            maven { url "https://dl.bintray.com/thelasterstar/maven/" }

            // 支付宝 SDK AAR 包所需的配置
            flatDir {
                dirs '../shareutil/libs'
            }
            jcenter()
        }
    }

    ......

    // 所需版本可自行配置
    ext {
        compileSdkVersion = 27

        minSdkVersion = 21
        targetSdkVersion = 27
        supportVersion = "27.1.1"
    }
  1. 在使用之前设置在各个平台申请的Id,以及分享的回调(推荐放在Application的onCreate方法中)

         // init
         ShareConfig config = ShareConfig.instance()
                 .qqId(QQ_ID)
                 .wxId(WX_ID)
                 .weiboId(WEIBO_ID)
                 // 下面两个,如果不需要登录功能,可不填写
                 .weiboRedirectUrl(REDIRECT_URL)
                 .wxSecret(WX_ID);
         ShareManager.init(config);
    
         ** 系统分享图片必须添加以下两步
         1. 必须在AndroidManifest.xml添加 provider
         <!--兼容系统分享 7.0不支持uri跳转 必须使用content://替代-->
         <provider
             android:name="android.support.v4.content.FileProvider"
             android:authorities="${applicationId}.file.provider"  // 必须写成这个值
             android:exported="false"
             android:grantUriPermissions="true">
             <meta-data
                 android:name="android.support.FILE_PROVIDER_PATHS"
                 android:resource="@xml/file_paths" />
         </provider>
    
         2.res文件夹下创建xml文件夹,并在xml下创建file_paths.xml 文件名随便取
         注:分享图片保存地址为 /storage/emulated/0/Android/data/com.leo.project/files/share_image.jpg
         因此保存到 外部存储区域根目录下(使用 external-files-path)
         <paths xmlns:android="http://schemas.android.com/apk/res/android">
             <external-files-path name="name" path="" />
         </paths>
    

分享使用

    ShareUtil.shareImage(this, SharePlatform.QQ, "http://image.com", shareListener);
    ShareUtil.shareText(this, SharePlatform.WX, "分享文字", shareListener);
    ShareUtil.shareMedia(this, SharePlatform.QZONE, "title", "summary", "targetUrl", "thumb", shareListener);

    // miniId为小程序id    miniPath为小程序Path
    // 低版本微信不支持小程序分享, 此时默认网页分享方式
    ShareUtil.shareMedia(this, SharePlatform.WX, "title", "summary", "targetUrl", "thumb", "miniId", "miniPath", shareListener);

登录使用

        // LoginPlatform.WEIBO  微博登录   
        // LoginPlatform.WX     微信登录
        // LoginPlatform.QQ     QQ登录 
        final LoginListener listener = new LoginListener() {
                @Override
                public void loginSuccess(LoginResult result) {
                    //登录成功, 如果你选择了获取用户信息,可以通过
                }
            
                @Override
                public void loginFailure(Exception e) {
                    Log.i("TAG", "登录失败");
                }
    
                @Override
                public void loginCancel() {
                    Log.i("TAG", "登录取消");
                }
            };
        LoginUtil.login(MainActivity.this, LoginPlatform.WEIBO, mLoginListener, isFetchUserInfo);

支付使用

    // PayPlatform.ALIPAY   支付宝支付
    // PayPlatform.WXPAY    微信支付
    PayListener mPayListener = new PayListener() {
        @Override
        public void paySuccess() {
            Toast.makeText(v.getContext(), "支付成功", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void payFailed(Exception e) {
            Toast.makeText(v.getContext(), "支付失败 " + e.getMessage(), Toast.LENGTH_SHORT).show();
        }

        @Override
        public void payCancel() {
            Toast.makeText(v.getContext(), "支付取消", Toast.LENGTH_SHORT).show();
        }
    };

    // 支付宝支付
    AliPayParamsBean payParamsBean = new AliPayParamsBean();
    payParamsBean.setOrderInfo("xxxx");
    PayUtil.pay(getContext(), PayPlatform.ALIPAY, payParamsBean, mPayListener);

    // 微信支付
    WXPayParamsBean wxPayParamsBean = new WXPayParamsBean();
    wxPayParamsBean.setAppid("xxxx");
    wxPayParamsBean.setNonceStr("xxxx");
    wxPayParamsBean.setPartnerid("xxxx");
    wxPayParamsBean.setPackageValue("xxxx");
    wxPayParamsBean.setPrepayId("xxxx");
    wxPayParamsBean.setSign("xxxx");
    wxPayParamsBean.setTimestamp("xxxx");
    PayUtil.pay(getContext(), PayPlatform.WXPAY, wxPayParamsBean, mPayListener);

使用说明

  1. QQ不支持纯文字分享,会直接分享失败

  2. 使用Jar文件的版本如下:

     微信版本:com.tencent.mm.opensdk:wechat-sdk-android-without-mta:5.1.4
     QQ版本:libs/open_sdk_r6008_lite.jar
     微博版本: com.sina.weibo.sdk:core:4.1.0:openDefaultRelease@aar
     支付宝版本: 'libs/alipaySdk-20180403.jar'
    
  3. 分享的bitmap,会在分享之后被回收掉,所以分享之后最好不要再对该bitmap做任何操作。

  4. ShareListener的回调结果仅供参考,不可当做分享是否返回的依据,它并不是那么完全可靠,因为某些操作,例如微博分享取消,但是用户选择了保存草稿,这时候客户端并不会收到回调,所以也就不会调用ShareListener的onCancel

Thanks

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,870评论 25 707
  • 那一刹看见的不是你笑颜 是...
    漓者阅读 227评论 0 0
  • 2017年10月11日,如是家人谭红霞,种种子第72天。 发心:我今不是为了我个人而闻思修,而是为了六道轮回一切如...
    心雅701阅读 185评论 6 3
  • 一个燥热的不是很过分的早秋正午,又是一个不知道去哪里的周日出租屋,听着对门情侣边吃饭边打趣的声音,我笑了,你们终于...
    繁星话阅读 56评论 0 0
  • 聪明但不自以为是 有趣但不哗众取宠 知世故而不世故. ————201...
    AI舒阅读 206评论 0 0