主要通过集成友盟SDK+QQ/微信/新浪SDK实现分享和微信登录功能

  • 1、build.gradle 配置
  • 2、app 文件夹下build.gradle添加以下内容
  • 3、androidManifest.xml 配置
  • 4、包目录下创建 wxapi 目录 添加 WXEntryActivity.class 文件
  • 5、app 里面的 AndroidManifest.xml
  • 6、调用功能的对应Activity 配置
  • 7、分享调用
  • 8、微信、QQ登录
  • 9、初始化

采用gradle集成方式:友盟文档: https://developer.umeng.com/docs/128606/detail/193879

1、build.gradle 配置

在build.gradle中添加友盟 " maven { url ‘https://repo1.maven.org/maven2/’} "

// Top-level build file where you can add configuration options common to all sub-projects/modules.
apply from: "config.gradle"
buildscript {repositories {...//友盟maven { url  'https://repo1.maven.org/maven2/'}}dependencies {classpath 'com.android.tools.build:gradle:3.5.0'}
}allprojects {repositories {...//友盟maven { url  'https://repo1.maven.org/maven2/'}}
}task clean(type: Delete) {delete rootProject.buildDir
}

2、app 文件夹下build.gradle添加以下内容

...
android {...defaultConfig {..ndk {//选择要添加的对应 cpu 类型的 .so 库。abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86'}
manifestPlaceholders = [//极光JPUSH_PKGNAME: applicationId,JPUSH_APPKEY : "***********", //JPush 上注册的包名对应的 Appkey.JPUSH_CHANNEL: "developer-default", //暂时填写默认值即可.//QQ AppIDqqappid      : "自己申请的",]}buildTypes {....}//aarrepositories {flatDir {dirs 'libs'}}sourceSets {main {manifest.srcFile 'AndroidManifest.xml'java.srcDirs = ['src']resources.srcDirs = ['src']aidl.srcDirs = ['src']renderscript.srcDirs = ['src']res.srcDirs = ['res']assets.srcDirs = ['assets']jniLibs.srcDirs = ['libs']}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}}
//如果以下内容是放在module 中 implementation 改成api 就可以
dependencies {implementation fileTree(dir: 'libs', include: ['*.jar'])//基础组件库//必选api  'com.umeng.umsdk:common:9.4.4'//必选api  'com.umeng.umsdk:asms:1.4.1'//集成U-Link,可选,如要统计分享回流次数和分享新增用户指标则必选//api 'com.umeng.umsdk:link:1.1.0'//U-Share SDKapi  'com.umeng.umsdk:share-core:7.1.7'//分享核心库,必选api  'com.umeng.umsdk:share-board:7.1.7'//分享面板功能,可选api 'com.umeng.umsdk:share-wx:7.1.7' //微信完整版api 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:6.7.9'//微信官方依赖库,必选api 'com.umeng.umsdk:share-qq:7.1.7'//QQ完整版api files('libs/open_sdk_3.5.7.4_r1bc9afe_lite.jar')//QQ官方依赖库,必选api 'com.squareup.okhttp3:okhttp:3.14.9'//QQ SDK在3.53.0版本及以上时需要集成okhttp官方依赖库,必选api 'com.umeng.umsdk:share-sina:7.1.7'//新浪微博完整版api 'io.github.sinaweibosdk:core:11.11.1@aar'//新浪微博官方SDK依赖库,必选
//    api files('libs/openDefault-10.10.0.aar')}

3、androidManifest.xml 配置

以下内容不需要配置

<application><!-- QQ配置  start   -->
<!--            <activity-->
<!--                android:name="com.tencent.tauth.AuthActivity"-->
<!--                android:launchMode="singleTask"-->
<!--                android:noHistory="true">-->
<!--                <intent-filter>-->
<!--                    <action android:name="android.intent.action.VIEW" />--><!--                    <category android:name="android.intent.category.DEFAULT" />-->
<!--                    <category android:name="android.intent.category.BROWSABLE" />--><!--                    <data android:scheme="tencent+appid" />-->
<!--                </intent-filter>-->
<!--            </activity>--><!--            &lt;!&ndash;        这个配置可以解决QQ分身的背景透明度 &ndash;&gt;-->
<!--            <activity-->
<!--                android:name="com.tencent.connect.common.AssistActivity"-->
<!--                android:configChanges="orientation|keyboardHidden|screenSize"-->
<!--                tools:replace="android:configChanges"-->
<!--                android:theme="@android:style/Theme.Translucent.NoTitleBar" />--><!-- QQ配置  end --><!-- 友盟分享编辑页(只有新浪微博精简版,豆瓣人人腾讯微博需要): --><!--   <activityandroid:name="com.umeng.socialize.editorpage.ShareActivity"android:excludeFromRecents="true"android:screenOrientation="portrait"android:theme="@style/Theme.UMDefault" />--></application>

不然会提示

Manifest merger failed : Attribute data@scheme at AndroidManifest.xml requires a placeholder substitution but no value for is provided.

主要原因是
QQ SDK中有配置,只需要在build.gradle中配置"qqappid"(详情见步奏2) manifestPlaceholders =[qqappid : “自己申请的”,]
另外友盟SDK最新版引用的QQ、微信SDK和官方的一至!!

4、包目录下创建 wxapi 目录 添加 WXEntryActivity.class 文件

package 你的包名.wxapi;
import com.umeng.socialize.weixin.view.WXCallbackActivity;public class WXEntryActivity extends WXCallbackActivity {}

5、res/xml/file_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<resources><paths>....<!-- QQ 官方分享SDK 共享路径 --><root-path name="opensdk_root" path=""/><external-files-path name="opensdk_external" path="Images/tmp"/><!-- 友盟微信分享SDK 共享路径--><external-files-path name="umeng_cache" path="umeng_cache/"/><!-- 新浪微博 官方分享SDK 10.10.0共享路径 --><external-files-path name="share_files" path="." /></paths>
</resources>

5、app 里面的 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"package="你的包名">
...//Android11 在应用的AndroidManifest.xml添加如下<queries>标签<queries><package android:name="com.tencent.mm" />            // 指定微信包名<package android:name="com.tencent.mobileqq" />    //指定qq包名<package android:name="com.sina.weibo" />             //指定微博包名<package android:name="com.qzone" />                   //指定QQ空间包名</queries>//或者<!--查看应用是否已安装·Android 11 新增--><uses-permissionandroid:name="android.permission.QUERY_ALL_PACKAGES"tools:ignore="QueryAllPackagesPermission" /><application>...
<!--文件访问配置--><providerandroid:name="androidx.core.content.FileProvider"android:authorities="${applicationId}.fileprovider"android:exported="false"android:grantUriPermissions="true"><!-- 元数据 --><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"tools:replace="android:resource"android:resource="@xml/file_paths" /></provider>...</application>
</manifest>

6、调用功能的对应Activity 配置

 @Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);//QQ 回调需要UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);}@Overridepublic void onDestroy() {super.onDestroy();UMShareAPI.get(this).release();}

7、分享调用

/*** 面板分享*/public static void startShare(Activity activity, ShareBean shareBean, UMShareListener shareListener) {new ShareAction(activity).setDisplayList(SHARE_MEDIA.WEIXIN_CIRCLE, SHARE_MEDIA.WEIXIN, SHARE_MEDIA.QZONE, SHARE_MEDIA.QQ).setCallback(shareListener).withMedia(shareBean.getUmWeb()).open();}/*** 直接分享*/public static void startShare(Activity activity, UMImage image, SHARE_MEDIA media,UMShareListener shareListener) {new ShareAction(activity).setPlatform(media).setCallback(shareListener).withMedia(image).share();}public UMShareListener umShareListener = new UMShareListener() {@Overridepublic void onStart(SHARE_MEDIA share_media) {}@Overridepublic void onResult(SHARE_MEDIA share_media) {ToastUtils.show(getString(R.string.str_share_success));}@Overridepublic void onError(SHARE_MEDIA share_media, Throwable throwable) {SpDialog.dismiss();if (throwable.getMessage().contains("2008")) {if (share_media == SHARE_MEDIA.WEIXIN_CIRCLE || share_media == SHARE_MEDIA.WEIXIN) {ToastUtils.show("您没有安装微信,请安装微信");} else if (share_media == SHARE_MEDIA.QZONE || share_media == SHARE_MEDIA.QQ) {ToastUtils.show("您没有安装QQ,请先安装QQ");}} else {ToastUtils.show(getString(R.string.str_share_error));}}@Overridepublic void onCancel(SHARE_MEDIA share_media) {ToastUtils.show(getString(R.string.str_share_cancel));}};

8、微信、QQ登录

UMShareAPI.get(this).getPlatformInfo(this, platformType, authListener);/*** 友盟umAuthListener为授权回调*/UMAuthListener authListener = new UMAuthListener() {/*** @desc 授权开始的回调* @param platform 平台名称*/@Overridepublic void onStart(SHARE_MEDIA platform) {}/*** @desc 授权成功的回调* @param data 用户资料返回* 登录成功后,第三方平台会将用户资料传回,* 全部会在Map data中返回 ,由于各个平台对于用户资料的标识不同,因此为了便于开发者使用,我们将一些常用的字段做了统一封装,开发者可以直接获取* 字段说明* UShare封装后字段名   QQ原始字段名   微信原始字段名   新浪原始字段名   字段含义  备注* uid  openid  unionid    id   用户唯一标识  uid能否实现Android与iOS平台打通,目前QQ只能实现同APPID下用户ID匹配* name    screen_name     screen_name     screen_name     用户昵称* gender  gender  gender  gender  用户性别    该字段会直接返回男女* iconurl profile_image_url   profile_image_url   profile_image_url   用户头像*/@Overridepublic void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {LogUtils.d("第三方平台信息:" + data.toString());}/*** 授权失败的回调*/@Overridepublic void onError(SHARE_MEDIA platform, int action, Throwable t) {}/**授权取消的回调*/@Overridepublic void onCancel(SHARE_MEDIA platform, int action) {}};

9、初始化

Application 的onCreate()方法

 /*** 初始化友盟分享*/private void initUMeng() {//设置LOG开关,默认为falseUMConfigure.setLogEnabled(true);//友盟预初始化UMConfigure.preInit(getApplicationContext(),"友盟ID","Umeng");//判断是否同意隐私协议,uminit为1时为已经同意,直接初始化umsdkif(MyUtils.getString((String) SPUtils.get(SpConstant.uminit,"")).equals("1")){//友盟正式初始化UmInitConfig umInitConfig=new UmInitConfig();umInitConfig.UMinit(getApplicationContext());}}

UmInitConfig .class
1、Andriod 11必须要调用PlatformConfig.setWXFileProvider、PlatformConfig.setQQFileProvider等等,否则分享本地图片到微信、QQ、微博平台会失败


public class UmInitConfig {public  void  UMinit(Context context){//初始化组件化基础库, 统计SDK/推送SDK/分享SDK都必须调用此初始化接口UMConfigure.init(context, "友盟ID", "Umeng", UMConfigure.DEVICE_TYPE_PHONE, "");String FileProvider = "包名.fileprovider";PlatformConfig.setWeixin("微信AppId", "appkey");PlatformConfig.setWXFileProvider(FileProvider);PlatformConfig.setSinaWeibo("微博AppId", "appkey", "返回");PlatformConfig.setSinaFileProvider(FileProvider);PlatformConfig.setQQZone("QQ AppId", "appkey");PlatformConfig.setQQFileProvider(FileProvider);}}

2、分享v7.1.7 SDK中的QQ SDK版本是v3.5.7,暂时只支持离线引入jar包和官方依赖库,并且需要调用授权api才可以正常使用授权和分享功能

//QQ官方sdk授权

Tencent.setIsPermissionGranted(true);

否则会报错:java.lang.Throwable: 错误码:2003 错误信息:分享失败----用户未授权,暂时无法使用QQ登录及分享等功能,

判断是否安装指定app

    public static boolean installApp(Context context, String package) {if (packageName == null || packageName.isEmpty()) {return false;}if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {//Android 11PackageInfo packageInfo;try {packageInfo = context.getPackageManager().getPackageInfo(packageName, 0);} catch (PackageManager.NameNotFoundException e) {packageInfo = null;e.printStackTrace();}return packageInfo != null;} else {final PackageManager packageManager = context.getPackageManager();List<PackageInfo> pInfo = packageManager.getInstalledPackages(0);if (pInfo != null) {for (int i = 0; i < pInfo.size(); i++) {String pn = pInfo.get(i).packageName;if (packageName.equals(pn)) {return true;}}}return false;}}

友盟社会化分享+第三方登录 2022.03.28 最新版相关推荐

  1. 友盟社会化分享微信登录签名错误

    使用微信登录时日志输出检查签名. 核对生成的签名与微信后台一致,但还是报这个错误. 请教了友盟技术支持,她根据apk生成的签名确实和我生成的不一致. 原来debug生成的签名和relase签名不一样导 ...

  2. umeng(友盟)实现第三方登录和分享详解之登录详解

    一.简单介绍 因为一个平台一个平台进行弄太麻烦,也不够统一,所以领导选择了umeng(我的内心是拒绝的),umeng的文档写的便于查找,但是比较分散,对于比较熟悉的很好用,没接触过umeng的肯定一脸 ...

  3. 微信5.0登录提示服务器繁忙,iOS集成友盟社会化分享微信无法登录?

    iOS集成友盟社会化分享SDK-5.0 点击微信登录的时候出现无法获取accessToken的现象,其他如QQ.微博都可以正常登录使用.另外QQ.微博和微信分享都可以正常使用. 望各位早日帮我解决或者 ...

  4. IOS友盟 社会化分享 社会化iOS组件 分享集成

    由于苹果审核政策需求,建议大家对未安装客户端平台进行隐藏,在设置QQ.微信AppID之后调用下面的方法,[UMSocialConfig hiddenNotInstallPlatforms:@[UMSh ...

  5. Android 友盟社会化分享的集成与封装

    Android 友盟社会化分享的集成与封装 分享是APP中非常高频的操作之一,在Android的开发环境中,第三方分享框架也有很多.比较流行的包括 极光社会化分享(sharesdk).友盟社会化分享( ...

  6. Android集成友盟社会化分享

    现在社会化分享组件有很多友推.Mob的ShareSDK.友盟社会化分享组件等,前面两种以前在做项目的时候用到过,最近的项目需要实现分享视频到各社交平台,对比了这三种组件觉得友盟社会化分享组件更适合这个 ...

  7. Android应用开发-小巫CSDN博客客户端之集成友盟社会化分享组件

    Android应用开发-小巫CSDN博客客户端之集成友盟社会化分享组件 上一篇博客给大家介绍了如何分析网页并且使用jsoup这个库对html代码进行解析,本篇博客继续给大家介绍如何集成友盟社会化组件, ...

  8. 使用友盟社会化分享IOS版SDK分享纯图片到微信

    本文和上一篇友盟社会化分享Android版是兄弟篇.其实本人用的是友盟Cocos2d-x的IOS版.对于普通IOS版如何分享纯图片到微信朋友圈,官网文档中已经说明的比较清楚,但是在Cocos2d-x版 ...

  9. Android开发——集成友盟社会化分享遇到的坑(二)

    前言 从工作到现在遇到了集成友盟社会化分享第二个坑,集成最新的版的友盟社会化分享SDK遇见了一个之前没有遇到过的程序错误 java.lang.NoClassDeFoundError:Failed re ...

最新文章

  1. 二十分钟教你如何将区块链应用与函数计算相结合
  2. nginx安装包_安装nginx与fastdfs-nginx-module
  3. windows服务与网页交互_戴尔高级主动式触控笔-PN579X评测:Windows也有好触控
  4. python中options设置_如何在AngularJS的ng-options中设置value属性?
  5. [新手学go]关于go语言中的变量重复声明
  6. c语言变量相等问题穷举法,C语言穷举法经典例题.ppt
  7. [多图]全球范围内Linux用户普及度数据
  8. 【码云周刊第 61 期】四款开源项目教你玩转微信游戏
  9. android.bg,[Android]AMS-PSS
  10. ABP官方文档翻译 1.5 多租户
  11. sql文件加载出错_四十二、SparkSQL通用数据源加载(load)和保存(save)
  12. python制作动图、怎么运行_漫画:如何分析运行中的 Python 程序?
  13. 【Python】区分List 和String
  14. 西门子系列PLC教学视频资源1——S7-200和S7-200smart
  15. deeping操作系统修改已挂载卷名称
  16. hdu题目分类--第二版
  17. linux设备驱动模型大剖析(1)-----底层阶级的程序猿
  18. Theos(二):NIC(New Instance Creator)
  19. Android 移动网络接入点名称(APN)
  20. Burpsuite字符偏移修正

热门文章

  1. CCF C³-19@航天宏图:星链互联,创新未来——商业卫星互联网时代的思考丨开始报名...
  2. iOS 设置按钮上图下文的方式
  3. 用pygame为大家燃放新年烟花
  4. 虚拟内存,物理内存,页面文件,还有任务管理器
  5. 西门子博途软件安装及使用
  6. ubuntu 将手柄控制信息发布到ros上
  7. Blender关于雕刻
  8. HTML jQuery实现点赞功能(模仿CSDN的样式)
  9. 东杰转债上市价格预测
  10. sentinel只有实时监控不显示