Android中友盟第三方登录与分享自动集成的那些坑

该内容来自于大神:https://blog.csdn.net/apro_wang/article/details/79923526

自动集成的方式现在只支持微信,QQ,新浪三个平台,如果需要使用其它平台请选择手动集成。

1:添加依赖
   

//友盟统计
compile 'com.umeng.sdk:common:1.5.1'
compile 'com.umeng.sdk:analytics:7.5.0'
//友盟社会化分享
compile 'com.umeng.sdk:share-core:6.9.1'
compile 'com.umeng.sdk:share-qq:6.9.1.1'
compile 'com.umeng.sdk:share-wechat:6.9.1'
compile 'com.umeng.sdk:share-sina:6.9.1'
//分享面板
compile 'com.umeng.sdk:shareboard-widget:6.9.1'


2:添加权限
   

 


3:在调用界面添加动态申请权限:
    

 
  1. if(Build.VERSION.SDK_INT>=23){

  2. String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.CALL_PHONE,Manifest.permission.READ_LOGS,Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.SET_DEBUG_APP,Manifest.permission.SYSTEM_ALERT_WINDOW,Manifest.permission.GET_ACCOUNTS,Manifest.permission.WRITE_APN_SETTINGS};

  3. ActivityCompat.requestPermissions(this,mPermissionList,123);

  4. }


4:添加平台相关配置
       (1)QQ相关配置:

 

在app级别 build.gradle中的 defaultConfig下添加manifestPlaceholders = [qqappid: "你的qq appid"]

 

//不配置会出现下面的错误

(2)微信相关配置:

在包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。里面不用做操作。并在AndroidManifest中添加

 

 
  1. android:name=".wxapi.WXEntryActivity"

  2. android:configChanges="keyboardHidden|orientation|screenSize"

  3. android:exported="true"

  4. android:screenOrientation="portrait"

  5. android:theme="@android:style/Theme.Translucent.NoTitleBar" />

 

5:在myapplication添加各平台的第三方key以及在onCreate中初始化。

 

(第三方账号申请地址http://dev.umeng.com/social/android/operation)

 
  1. @Override

  2. public void onCreate() {

  3. super.onCreate();

  4. UMConfigure.init(this,"你的应用在友盟上的APPKEY","umeng",UMConfigure.DEVICE_TYPE_PHONE,"");

  5. }

{
 
  1. //友盟相关平台配置。注意友盟官方新文档中没有这项配置,但是如果不配置会吊不起来相关平台的授权界面

  2. PlatformConfig.setWeixin("你的微信APPID", "你的微信AppSecret");//微信APPID和AppSecret

  3. PlatformConfig.setQQZone("你的QQAPPID", "你的QQAppSecret");//QQAPPID和AppSecret

  4. PlatformConfig.setSinaWeibo("你的微博APPID", "你的微博APPSecret","微博的后台配置回调地址");//微博

  5. }

6:在使用第三方登录界面中的代码:

mShareAPI = UMShareAPI.get(this);
mShareAPI.getPlatformInfo(this, SHARE_MEDIA.QQ, umAuthListener);//QQ登录
mShareAPI.deleteOauth(this, SHARE_MEDIA.QQ, umAuthListener);//撤销QQ授权
 
  1. umAuthListener = new UMAuthListener() {

  2. @Override

  3. public void onStart(SHARE_MEDIA platform) {}

  4. @Override

  5. public void onComplete(SHARE_MEDIA platform, int action, Map data) {

  6. // KLog.e("openid: " + data.get("uid"));

  7. // KLog.e("昵称: " + data.get("name"));

  8. // KLog.e("头像: " + data.get("iconurl"));

  9. // KLog.e("性别: " + data.get("gender"));

  10. }

  11.  
  12. @Override

  13. public void onError(SHARE_MEDIA platform, int action, Throwable t) {

  14.  
  15. }

  16.  
  17. @Override

  18. public void onCancel(SHARE_MEDIA platform, int action) {

  19.       }

  20. };

 
 
//在使用界面中要添加onActivityResult方法,否则授权回调不成功,获取不到第三方信息(如果在fragment中使用第三方登录,则在依附的activity中重写此方法)
 
  1. @Override

  2. public void onActivityResult(int requestCode, int resultCode, Intent data) {

  3. super.onActivityResult(requestCode, resultCode, data);

  4. UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);

  5. }

7:在使用分享界面中的代码

 
  1.         UMImage image = new UMImage(this, R.mipmap.logo);//分享图标

  2. final UMWeb web = new UMWeb("你要分享的地址"); //切记切记 这里分享的链接必须是http开头

  3. web.setTitle("你要分享内容的标题");//标题

  4. web.setThumb(image); //缩略图

  5. web.setDescription("你要分享内容的描述");//描述

  6.  
 
 
  1. new ShareAction(activity)

  2. .setDisplayList(SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE, SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE)

  3. .setShareboardclickCallback(new ShareBoardlistener() {

  4. @Override

  5. public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) {

  6. if (share_media == SHARE_MEDIA.QQ) {

  7. KLog.e("点击QQ");

  8. new ShareAction(activity).setPlatform(SHARE_MEDIA.QQ)

  9. .withMedia(web)

  10. .setCallback(umShareListener)

  11. .share();

  12. } else if (share_media == SHARE_MEDIA.WEIXIN) {

  13. KLog.e("点击微信");

  14. new ShareAction(activity).setPlatform(SHARE_MEDIA.WEIXIN)

  15. .withMedia(web)

  16. .setCallback(umShareListener)

  17. .share();

  18. } else if (share_media == SHARE_MEDIA.QZONE) {

  19. new ShareAction(activity).setPlatform(SHARE_MEDIA.QZONE)

  20. .withMedia(web)

  21. .setCallback(umShareListener)

  22. .share();

  23. } else if (share_media == SHARE_MEDIA.WEIXIN_CIRCLE) {

  24. new ShareAction(activity).setPlatform(SHARE_MEDIA.WEIXIN_CIRCLE)

  25. .withMedia(web)

  26. .setCallback(umShareListener)

  27. .share();

  28. }

  29. }

  30. }).open();

 
 
  1. umShareListener = new UMShareListener() {

  2. @Override

  3. public void onStart(SHARE_MEDIA platform) {

  4. //分享开始的回调

  5. }

  6.  
  7. @Override

  8. public void onResult(SHARE_MEDIA platform) {

  9. // Toast.makeText(ShareActivity.this, platform + " 分享成功啦", Toast.LENGTH_SHORT).show();

  10.  
  11. }

  12.  
  13. @Override

  14. public void onError(SHARE_MEDIA platform, Throwable t) {

  15. // Toast.makeText(ShareActivity.this,platform + " 分享失败啦", Toast.LENGTH_SHORT).show();

  16. }

  17.  
  18. @Override

  19. public void onCancel(SHARE_MEDIA platform) {

  20. // Toast.makeText(ShareActivity.this,platform + " 分享取消了", Toast.LENGTH_SHORT).show();

  21. }

  22. };

 
//在使用界面中要添加onActivityResult方法,否则授权回调不成功,获取不到第三方信息(如果在fragment中使用第三方登录,则在依附的activity中重写此方法)
 
  1. @Override

  2. public void onActivityResult(int requestCode, int resultCode, Intent data) {

  3. super.onActivityResult(requestCode, resultCode, data);

  4. UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);

  5. }

 

你可能感兴趣的:(Android中友盟第三方登录与分享自动集成的那些坑)