文章目录

  • 效果图
  • 实战

最近项目需要加入第三方分享和登录功能,之前其他项目的第三方分享和登录一直都使用ShareSDK实现的。为了统一使用友盟的全家桶,所以三方分享和登录也就选择了友盟。

效果图

实战

1. 申请友盟 Appkey
直接到友盟官网申请:友盟 SDK

2. 下载 SDK

3. 准备资源
使用友盟的集成工具快速集成友盟的分享SDK:双击 友盟集成工具.jar– 选择使用的平台和IDE,如图:

点击 OK 键,会在当前目录生成名为 umeng_integratetool_result 的文件夹,如图:


4. 开始集成

  • 将上面的文件夹依次粘贴到工程相应的文件夹即可,如图:
  • debug.keystore文件拷贝到项目的app目录下(对应app build中相应的位置),目的是为了使用友盟的签名,如图:
  • 添加回调 Activity
    • 微信回调:
      其实在第一步拷贝的时候已经添加了。即在包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity
    • QQ与新浪微博的回调:
      QQ与新浪不需要添加Activity,但需要在使用QQ分享或者授权的Activity中添加如下代码:
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {  super.onActivityResult(requestCode, resultCode, data);UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}

5. 配置清单文件 Android Manifest.xml

  • 添加权限:
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" / <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" / <uses-permission android:name="android.permission.READ_PHONE_STATE" / <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/ <uses-permission android:name="android.permission.INTERNET" / <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" / <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" / <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /
  • 添加sdk中需要的Activity
<!--微信-- <activityandroid:name=".wxapi.WXEntryActivity"android:configChanges="keyboardHidden|orientation|screenSize"android:exported="true"android:screenOrientation="portrait"android:theme="@android:style/Theme.Translucent.NoTitleBar"/ <!--新浪微博-- <activityandroid:name=".WBShareActivity"android:configChanges="keyboardHidden|orientation"android:screenOrientation="portrait" <intent-filter <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY"/ <category android:name="android.intent.category.DEFAULT"/ </intent-filter </activity <!--qq精简版-- <activityandroid:name="com.umeng.qq.tencent.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"/ <!--这里的scheme是qq分享要用的,100424468为自己申请的appid,真实项目中需要替换-- <data android:scheme="tencent100424468"/ </intent-filter </activity <activityandroid:name="com.umeng.qq.tencent.AssistActivity"android:configChanges="orientation|keyboardHidden|screenSize"android:screenOrientation="portrait"android:theme="@android:style/Theme.Translucent.NoTitleBar"/ <!--分享编辑页-- <activityandroid:name="com.umeng.socialize.editorpage.ShareActivity"android:excludeFromRecents="true"android:theme="@style/Theme.UMDefault"/
  • 添加友盟appkey
  <meta-dataandroid:name="UMENG_APPKEY"android:value="561**********990035bf" </meta-data

6. 配置三方 appkey
新建 MyApplication 继承 Application(注意:需要在清单文件中配置该MyApplication),在 MyApplication 文件中配置三方平台的 appkey 和初始化 sdk。如下:

public class MyApplication extends Application { @Overridepublic void onCreate() {  super.onCreate();UMShareAPI.get(this);//初始化sdk//开启debug模式,方便定位错误,具体错误检查方式可以查看http://dev.umeng.com/social/android/quick-integration的报错必看,正式发布,请关闭该模式Config.DEBUG = true;} //各个平台的配置{  //微信PlatformConfig.setWeixin("wxdc1e388c3822c80b", "key1");  //新浪微博(第三个参数为回调地址)PlatformConfig.setSinaWeibo("3921700954", "key2","http://sns.whalecloud.com/sina2/callback");  //QQPlatformConfig.setQQZone("100424468", "key3");}
}

7. 登录代码 MainActivity.java

public class MainActivity extends AppCompatActivity { private String TAG = this.getClass().getSimpleName(); @Overrideprotected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);} public void qqLogin(View view) {authorization(SHARE_MEDIA.QQ);} public void weiXinLogin(View view) {authorization(SHARE_MEDIA.WEIXIN);} public void sinaLogin(View view) {authorization(SHARE_MEDIA.SINA);} //授权private void authorization(SHARE_MEDIA share_media) {UMShareAPI.get(this).getPlatformInfo(this, share_media, new UMAuthListener() {   @Overridepublic void onStart(SHARE_MEDIA share_media) {Log.d(TAG, "onStart " + "授权开始");}   @Overridepublic void onComplete(SHARE_MEDIA share_media, int i, Map<String, String  map) {Log.d(TAG, "onComplete " + "授权完成");    //sdk是6.4.4的,但是获取值的时候用的是6.2以前的(access_token)才能获取到值,未知原因String uid = map.get("uid");String openid = map.get("openid");//微博没有String unionid = map.get("unionid");//微博没有String access_token = map.get("access_token");String refresh_token = map.get("refresh_token");//微信,qq,微博都没有获取到String expires_in = map.get("expires_in");String name = map.get("name");String gender = map.get("gender");String iconurl = map.get("iconurl");Toast.makeText(getApplicationContext(), "name=" + name + ",gender=" + gender, Toast.LENGTH_SHORT).show();    //拿到信息去请求登录接口。。。}   @Overridepublic void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {Log.d(TAG, "onError " + "授权失败");}   @Overridepublic void onCancel(SHARE_MEDIA share_media, int i) {Log.d(TAG, "onCancel " + "授权取消");}});} @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {  super.onActivityResult(requestCode, resultCode, data);UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);}
}

8. 分享代码

public class MainActivity extends AppCompatActivity {  private String TAG = this.getClass().getSimpleName();  @Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}  public void qq(View view) {ShareUtils.shareWeb(this, Defaultcontent.url, Defaultcontent.title, Defaultcontent.text, Defaultcontent.imageurl, R.mipmap.icon_logo_share, SHARE_MEDIA.QQ);}  public void weiXin(View view) {ShareUtils.shareWeb(this, Defaultcontent.url, Defaultcontent.title, Defaultcontent.text, Defaultcontent.imageurl, R.mipmap.icon_logo_share, SHARE_MEDIA.WEIXIN);}  public void weixinCircle(View view) {ShareUtils.shareWeb(this, Defaultcontent.url, Defaultcontent.title, Defaultcontent.text, Defaultcontent.imageurl, R.mipmap.icon_logo_share, SHARE_MEDIA.WEIXIN_CIRCLE);}  public void sina(View view) {ShareUtils.shareWeb(this, Defaultcontent.url, Defaultcontent.title, Defaultcontent.text, Defaultcontent.imageurl, R.mipmap.icon_logo_share, SHARE_MEDIA.SINA);}  public void Qzone(View view) {ShareUtils.shareWeb(this, Defaultcontent.url, Defaultcontent.title, Defaultcontent.text, Defaultcontent.imageurl, R.mipmap.icon_logo_share, SHARE_MEDIA.QZONE);}  @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);}

9. 分享工具类ShareUtils.java:

public class ShareUtils {  /*** 分享链接*/public static void shareWeb(final Activity activity, String WebUrl, String title, String description, String imageUrl, int imageID, SHARE_MEDIA platform) {UMWeb web = new UMWeb(WebUrl);//连接地址web.setTitle(title);//标题web.setDescription(description);//描述if (TextUtils.isEmpty(imageUrl)) {web.setThumb(new UMImage(activity, imageID)); //本地缩略图} else {web.setThumb(new UMImage(activity, imageUrl)); //网络缩略图}    new ShareAction(activity).setPlatform(platform).withMedia(web).setCallback(new UMShareListener() {          @Overridepublic void onStart(SHARE_MEDIA share_media) {}          @Overridepublic void onResult(final SHARE_MEDIA share_media) {activity.runOnUiThread(new Runnable() {              @Overridepublic void run() {                if (share_media.name().equals("WEIXIN_FAVORITE")) {Toast.makeText(activity, share_media + " 收藏成功", Toast.LENGTH_SHORT).show();} else {Toast.makeText(activity, share_media + " 分享成功", Toast.LENGTH_SHORT).show();}}});}          @Overridepublic void onError(final SHARE_MEDIA share_media, final Throwable throwable) {            if (throwable != null) {Log.d("throw", "throw:" + throwable.getMessage());}activity.runOnUiThread(new Runnable() {              @Overridepublic void run() {Toast.makeText(activity, share_media + " 分享失败", Toast.LENGTH_SHORT).show();}});}          @Overridepublic void onCancel(final SHARE_MEDIA share_media) {activity.runOnUiThread(new Runnable() {              @Overridepublic void run() {Toast.makeText(activity, share_media + " 分享取消", Toast.LENGTH_SHORT).show();}});}}).share();    //新浪微博中图文+链接/*new ShareAction(activity).setPlatform(platform).withText(description + " " + WebUrl).withMedia(new UMImage(activity,imageID)).share();*/}
}

Android 项目必备(三十七)-->使用友盟集成 QQ、微信、微博等第三方分享与登录相关推荐

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

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

  2. Android友盟集成QQ登陆详解大全

    第一步打开友盟官网注册一个账号,登录如下图进行操作点击个人中心 进入下一个界面点击管理创建一个应用生成AppKey:如下图 返回首页点击SDK与文档点击进行第三方登录集成点击右边的SDK下载选择你需要 ...

  3. 友盟集成QQ第三方登录

    友盟官网 将集成的包里面的东西都复制进项目里面libs,res分别复制进去 libs里面的jar包 add to module 新建App继承application public class App ...

  4. 友盟集成第三方登录--微信、QQ实现

    友盟集成了第三方登录,本给我们带来便利,但是文档只描述了集成方式,出现问题,发现还得自己各种baidu,这里总结自己遇到的一些坑,以防下次再踩. 友盟集成第三方微信登录: 友盟集成方案参考:http: ...

  5. 友盟集成小米华为(快速集成和厂商通道集成)

    友盟集成小米华为(快速集成和厂商通道集成) 内含很多本人遇到的坑 (上) 快速集成 如果您已经弄好了快速集成,想看厂商通道集成,请直接看下篇 快速集成 首先,毋庸置疑,实在友盟官方平台注册账号 链接: ...

  6. 友盟第三方QQ登录,报错注意,使用友盟社会化组件的微博SSO功能,需要按照文档要求在xcode设置url scheme!

    错误信息: ------------------------------------------ ------------------------------------------ 注意,使用友盟社 ...

  7. 友盟集成微信分享,显示您的设备没有安装微信问题及解决办法

    问题描述: 友盟集成微信分享功能,当点击分享到微信好友和朋友圈时,提示:您的设备没有安装微信,但事实上我的手机上已经安装了微信. 解决办法: 查看官方文档:http://dev.umeng.com/s ...

  8. umeng(友盟)集成

    1.umeng(友盟)集成--------认识umeng 2.cocos2dx + xcode集成umeng统计分析sdk 3.测试umeng统计分析功能

  9. Android 项目必备(三十八)-->APP 消息推送

    文章目录 前言 推送的实现方式 1. C2DM 2. 轮询 3. SMS信令推送 4. MQTT协议 5. XMPP协议 6. 使用第三方平台 Android 中 MQTT 的使用 1. 集成 2. ...

最新文章

  1. 如何营造专属你的企业技术影响力氛围感?我不允许你还不知道
  2. python 通过shutil.move移动图片出错xe5\xb8\xb8\xe7
  3. Winforn中DevExpress的TreeList中显示某路径下的所有目录和文件(附源码下载)
  4. 记录 之 Argparse 中的 可选参数 action 用法
  5. asp.net 开发注意的几点
  6. Linux中使用netstat命令的基本操作,排查端口号的占用情况
  7. 信息安全工程师笔记-数据库安全
  8. java 实现二分法
  9. 一文详解 Serverless 技术选型
  10. 六款Linux常用远程连接工具介绍,看看哪一款最适合你
  11. matlab 画散点图后添加趋势线
  12. python对接蚂蚁验证码平台
  13. 引央视主播康辉大笑的度晓晓,是个只会吹彩虹屁的 AI 助手吗?
  14. Win10关闭显示器后立即锁定
  15. Android实现选择相册图片---类似微信的选择图片页面
  16. 徐磊语法 6 7 时态的正确定义
  17. 实验4 基于预测分析表法的语法分析程序_第三十届 脑功能磁共振数据处理分析培训班...
  18. 数据结构与算法--递归(factorial)
  19. Issues:Frequency out of range: (expecting between 112.50Hz and 275.00Hz, measured 99.85Hz)
  20. java反射中method类中的invoke方法是做什么的,他有什么作用?

热门文章

  1. Matlab中readtable用法
  2. 关于label smoothing的理解
  3. 计算机网络复习--名词解释
  4. Optional int parameter ‘id‘ is present but cannot be translated into a null
  5. hibernate 报错: ``` WARN: GenerationTarget encountered exception accepting command : Error executing
  6. DAO设计-原理和实现
  7. unity shader forge右侧方法栏
  8. PyQt5教程(十二)——实现QQ登录界面(六、实现鼠标拖动界面,鼠标事件)
  9. 2022全年度吸尘器十大热门品牌销量榜单
  10. 计算机科学 课程主页