友盟+搜索

{{errorMsg}}

混淆文件

为了保证引用友盟Social SDK jar文件以及腾讯jar文件不被混淆,请在proguard.cfg文件中添加以下代码避免被混淆.

    -dontusemixedcaseclassnames
    -dontshrink
    -dontoptimize
    -dontwarn com.google.android.maps.**
    -dontwarn android.webkit.WebView
    -dontwarn com.umeng.**
    -dontwarn com.tencent.weibo.sdk.**
    -dontwarn com.facebook.**
    -keep public class javax.**
    -keep public class android.webkit.**
    -dontwarn android.support.v4.**
    -keep enum com.facebook.**
    -keepattributes Exceptions,InnerClasses,Signature
    -keepattributes *Annotation*
    -keepattributes SourceFile,LineNumberTable

    -keep public interface com.facebook.**
    -keep public interface com.tencent.**
    -keep public interface com.umeng.socialize.**
    -keep public interface com.umeng.socialize.sensor.**
    -keep public interface com.umeng.scrshot.**
    -keep class com.android.dingtalk.share.ddsharemodule.** { *; }
    -keep public class com.umeng.socialize.* {*;}


    -keep class com.facebook.**
    -keep class com.facebook.** { *; }
    -keep class com.umeng.scrshot.**
    -keep public class com.tencent.** {*;}
    -keep class com.umeng.socialize.sensor.**
    -keep class com.umeng.socialize.handler.**
    -keep class com.umeng.socialize.handler.*
    -keep class com.umeng.weixin.handler.**
    -keep class com.umeng.weixin.handler.*
    -keep class com.umeng.qq.handler.**
    -keep class com.umeng.qq.handler.*
    -keep class UMMoreHandler{*;}
    -keep class com.tencent.mm.sdk.modelmsg.WXMediaMessage {*;}
    -keep class com.tencent.mm.sdk.modelmsg.** implements   com.tencent.mm.sdk.modelmsg.WXMediaMessage$IMediaObject {*;}
    -keep class im.yixin.sdk.api.YXMessage {*;}
    -keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}
    -keep class com.tencent.mm.sdk.** {
     *;
    }
    -keep class com.tencent.mm.opensdk.** {
   *;
    }
    -dontwarn twitter4j.**
    -keep class twitter4j.** { *; }

    -keep class com.tencent.** {*;}
    -dontwarn com.tencent.**
    -keep public class com.umeng.com.umeng.soexample.R$*{
    public static final int *;
    }
    -keep public class com.linkedin.android.mobilesdk.R$*{
    public static final int *;
        }
    -keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
    }

    -keep class com.tencent.open.TDialog$*
    -keep class com.tencent.open.TDialog$* {*;}
    -keep class com.tencent.open.PKDialog
    -keep class com.tencent.open.PKDialog {*;}
    -keep class com.tencent.open.PKDialog$*
    -keep class com.tencent.open.PKDialog$* {*;}

    -keep class com.sina.** {*;}
    -dontwarn com.sina.**
    -keep class  com.alipay.share.sdk.** {
       *;
    }
    -keepnames class * implements android.os.Parcelable {
    public static final ** CREATOR;
    }

    -keep class com.linkedin.** { *; }
    -keepattributes Signature

QQ平台错误码对照

110201:未登陆
110405:登录请求被限制
110404:请求参数缺少appid
110401:请求的应用不存在
110407:应用已经下架
110406:应用没有通过审核
100044:未经过安全校验的包名和签名
110500:获取用户授权信息失败
110501:获取应用的授权信息失败
110502:设置用户授权失败
110503:获取token失败
110504:系统内部错误

微信平台错误码对照

40001   invalid credential  不合法的调用凭证
40002   invalid grant_type  不合法的grant_type
40003   invalid openid  不合法的OpenID
40004   invalid media type  不合法的媒体文件类型
40007   invalid media_id    不合法的media_id
40008   invalid message type    不合法的message_type
40009   invalid image size  不合法的图片大小
40010   invalid voice size  不合法的语音大小
40011   invalid video size  不合法的视频大小
40012   invalid thumb size  不合法的缩略图大小
40013   invalid appid   不合法的AppID
40014   invalid access_token    不合法的access_token
40015   invalid menu type   不合法的菜单类型
40016   invalid button size 不合法的菜单按钮个数
40017   invalid button type 不合法的按钮类型
40018   invalid button name size    不合法的按钮名称长度
40019   invalid button key size 不合法的按钮KEY长度
40020   invalid button url size 不合法的url长度
40023   invalid sub button size 不合法的子菜单按钮个数
40024   invalid sub button type 不合法的子菜单类型
40025   invalid sub button name size    不合法的子菜单按钮名称长度
40026   invalid sub button key size 不合法的子菜单按钮KEY长度
40027   invalid sub button url size 不合法的子菜单按钮url长度
40029   invalid code    不合法或已过期的code
40030   invalid refresh_token   不合法的refresh_token
40036   invalid template_id size    不合法的template_id长度
40037   invalid template_id 不合法的template_id
40039   invalid url size    不合法的url长度
40048   invalid url domain  不合法的url域名
40054   invalid sub button url domain   不合法的子菜单按钮url域名
40055   invalid button url domain   不合法的菜单按钮url域名
40066   invalid url 不合法的url
41001   access_token missing    缺失access_token参数
41002   appid missing   缺失appid参数
41003   refresh_token missing   缺失refresh_token参数
41004   appsecret missing   缺失secret参数
41005   media data missing  缺失二进制媒体文件
41006   media_id missing    缺失media_id参数
41007   sub_menu data missing   缺失子菜单数据
41008   missing code    缺失code参数
41009   missing openid  缺失openid参数
41010   missing url 缺失url参数
42001   access_token expired    access_token超时
42002   refresh_token expired   refresh_token超时
42003   code expired    code超时
43001   require GET method  需要使用GET方法请求
43002   require POST method 需要使用POST方法请求
43003   require https   需要使用HTTPS
43004   require subscribe   需要订阅关系
44001   empty media data    空白的二进制数据
44002   empty post data 空白的POST数据
44003   empty news data 空白的news数据
44004   empty content   空白的内容
44005   empty list size 空白的列表
45001   media size out of limit 二进制文件超过限制
45002   content size out of limit   content参数超过限制
45003   title size out of limit title参数超过限制
45004   description size out of limit   description参数超过限制
45005   url size out of limit   url参数长度超过限制
45006   picurl size out of limit    picurl参数超过限制
45007   playtime out of limit   播放时间超过限制(语音为60s最大)
45008   article size out of limit   article参数超过限制
45009   api freq out of limit   接口调动频率超过限制
45010   create menu limit   建立菜单被限制
45011   api limit   频率限制
45012   template size out of limit  模板大小超过限制
45016   can't modify sys group  不能修改默认组
45017   can't set group name too long sys group 修改组名过长
45018   too many group now, no need to add new  组数量过多
50001   api unauthorized    接口未授权 

demo运行流程

android studio

修改gradle版本

在这里将gradle的版本修改成你电脑中装的版本,不修改也可以,as会自动下载,这样打开工程会很慢

打开demo工程

签名文件

我们demo中默认加了签名文件,不用修改看一下就好

混淆

混淆默认是开启的

buildTypes {
    release {
        // 是否进行混淆
        minifyEnabled true
        // 混淆文件的位置
        signingConfig signingConfigs.debug
       proguardFiles 'proguard-rules.pro'
    }

    debug {
        minifyEnabled true
        signingConfig signingConfigs.debug
        proguardFiles 'proguard-rules.pro'
    }
}

运行demo工程

运行就可以了

使用完整版

demo中加入的是全量集合也就是既有精简版,又有完整版,但是默认使用的是精简版

如果想看完整版的效果可以进行如下设置 在app文件中,设置使用完整版

然后在微信的回调WXEntryActivity中修改import的路径

qq在Androidmanifest文件中做下配置修改: 精简版使用这个配置:

完整版使用这个配置:(要把精简版的配置屏蔽掉)

eclipse

打开工程

设置签名

运行demo工程

运行就可以了

使用完整版

demo中加入的是全量集合也就是既有精简版,又有完整版,但是默认使用的是精简版

如果想看完整版的效果可以进行如下设置 在app文件中,设置使用完整版

然后在微信的回调WXEntryActivity中修改import的路径

qq在Androidmanifest文件中做下配置修改: 精简版使用这个配置:

完整版使用这个配置:(要把精简版的配置屏蔽掉)

第三方授权

授权之前需要工程配置,请参考配置文档 授权可以通过如下代码实现,不同平台只要传入不同的SHARE_MEDIA即可。

          UMShareAPI  mShareAPI = UMShareAPI.get( MainActivity.this );
          mShareAPI.doOauthVerify(MainActivity.this, SHARE_MEDIA.QQ, umAuthListener);

其中umAuthListener为授权回调,构建如下,其中授权成功会回调onComplete,取消授权回调onCancel,授权错误回调onError,对应的错误信息可以用过onError的Throwable参数来打印

private UMAuthListener umAuthListener = new UMAuthListener() {
 @Override
    public void onStart(SHARE_MEDIA platform) {
       //授权开始的回调
    }
    @Override
    public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
        Toast.makeText(getApplicationContext(), "Authorize succeed", Toast.LENGTH_SHORT).show();

    }

    @Override
    public void onError(SHARE_MEDIA platform, int action, Throwable t) {
        Toast.makeText( getApplicationContext(), "Authorize fail", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onCancel(SHARE_MEDIA platform, int action) {
        Toast.makeText( getApplicationContext(), "Authorize cancel", Toast.LENGTH_SHORT).show();
    }
};

授权中只是能拿到uid,openid,token这些授权信息,想获取用户名和用户资料,需要调用获取用户信息的接口。

各平台授权回调map对照

新浪微博

uid 用户id

name (6.2以前用userName)用户名

accessToken (6.2以前用access_token)

RefreshToken(6.2以前用refresh_token)

expiration (6.2以前用expires_in)过期时间

iconurl (6.2以前用icon_url)头像,没有设置头像时为null

注意:如果使用精简版,网页授权没有用户名和头像

微信

openid

uid (6.2以前用unionid)用户id

accessToken (6.2以前用access_token)

RefreshToken(6.2以前用refresh_token)

expiration (6.2以前用expires_in)过期时间

QQ

uid 用户id

openid

accessToken (6.2以前用access_token)

expiration (6.2以前用expires_in)过期时间

人人

uid

accessToken (6.2以前用access_token)

expiration (6.2以前用expires_in)过期时间

access_secret

豆瓣

uid

accessToken (6.2以前用access_token)

expiration (6.2以前用expires_in)过期时间

access_secret

twitter

uid 用户id

accessToken (6.2以前用access_token)

access_token_secret

name (6.2以前用userName)用户名

facebook

uid 用户id

accessToken (6.2以前用access_token)

expiration (6.2以前用expires_in)过期时间

Linkin

accessToken (6.2以前用access_token)

expiration (6.2以前用expires_on)过期时间

分享面板进阶

普通分享面板

如快速集成文档所示

分享面板样式自定义

在6.10版本之后,您可以使用ShareBoardConfig类来配置分享面板的样式,根据不同的配置,可以显示不同的样式,如下图所示:

你还可以根据下面介绍的方法进行更多样式的配置,配置完ShareBoardConfig,只需在分享面板的open方法中传入即可,如下所示:

ShareBoardConfig config = new ShareBoardConfig();
config.setShareboardPostion(ShareBoardConfig.SHAREBOARD_POSITION_CENTER);
config.setMenuItemBackgroundShape(ShareBoardConfig.BG_SHAPE_CIRCULAR);
config.setCancelButtonVisibility(true);
shareAction.open(config);

设置分享面板title文本内容

public ShareBoardConfig setTitleText(String title)

设置分享面板title文本颜色

public ShareBoardConfig setTitleTextColor(int color)

color的int值(不是color的资源id)

设置title是否显示

visibility(true为显示,false为隐藏)

public ShareBoardConfig setTitleVisibility(boolean visibility)

设置item文字的字体颜色

color的int值(不是color的资源id)

ShareBoardConfig setMenuItemTextColor(int color)

设置item图标按下效果颜色

color的int值(不是color的资源id)

ShareBoardConfig setMenuItemIconPressedColor(int color)

设置item背景颜色

normalColor背景色
color的int值(不是color的资源id)

public ShareBoardConfig setMenuItemBackgroundColor(int normalColor)

设置item背景颜色

normalColor背景色
pressedColor按下时色值 color的int值(不是color的资源id)

public ShareBoardConfig setMenuItemBackgroundColor(int normalColor, int pressedColor)

设置item背景形状

shape 背景形状的type,可选值:

  • ShareBoardConfig.BG_SHAPE_NONE(无背景)
  • ShareBoardConfig.BG_SHAPE_CIRCULAR(圆形)
  • ShareBoardConfig.BG_SHAPE_ROUNDED_SQUARE(圆角方形)

public ShareBoardConfig setMenuItemBackgroundShape(int shape)

设置item背景形状

shape 背景形状的type,可选值: 1 ShareBoardConfig.BG_SHAPE_NONE(无背景) 2 ShareBoardConfig.BG_SHAPE_CIRCULAR(圆形) 3 ShareBoardConfig.BG_SHAPE_ROUNDED_SQUARE(圆角方形)

angle 圆角角度

ShareBoardConfig setMenuItemBackgroundShape(int shape, int angle)

设置指示器的颜色

normalColor未选中的指示器颜色
color的int值(不是color的资源id)

ShareBoardConfig setIndicatorColor(int normalColor)

设置指示器的颜色

normalColor未选中的指示器颜色
selectedColor当前页面指示器的颜色 color的int值(不是color的资源id)

ShareBoardConfig setIndicatorColor(int normalColor, int selectedColor)

设置指示器的显示状态

ShareBoardConfig setIndicatorVisibility(boolean visibility)

设置取消按钮的背景色

normalColor背景色
color的int值(不是color的资源id)

ShareBoardConfig setCancelButtonBackground(int normalColor)

设置取消按钮的背景色

normalColor背景色
pressedColor按下时色值 color的int值(不是color的资源id)

ShareBoardConfig setCancelButtonBackground(int normalColor, int pressedColor)

设置取消按钮文本内容

ShareBoardConfig setCancelButtonText(String text)

设置取消按钮文本字体颜色

color字体颜色
color的int值(不是color的资源id)

ShareBoardConfig setCancelButtonTextColor(int color)

设置取消按钮是否显示

visibility(true为显示,false为隐藏)

ShareBoardConfig setCancelButtonVisibility(boolean visibility)

设置分享面板的背景颜色

color背景颜色
color的int值(不是color的资源id)

ShareBoardConfig setShareboardBackgroundColor(int color)

设置分享面板的位置

position 位置,可选值:

ShareBoardConfig.SHAREBOARD_POSITION_CENTER(居中显示)
ShareBoardConfig.HAREBOARD_POSITION_BOTTOM(底部显示)
ShareBoardConfig setShareboardPostion(int position) 

设置分享面板消失监听

分享面板的关闭监听可以通过这种方式设定:

config.setOnDismissListener(new PopupWindow.OnDismissListener() {
                    @Override
                    public void onDismiss() {

                    }
                });

分享面板点击监听

mShareAction.setShareboardclickCallback(new ShareBoardlistener() {
                    @Override
                    public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) {

                    }
                })

增加自定义分享按钮的分享面板

如果需要对分享面板增加自定义的按钮,可以通过

new ShareAction(ShareMenuActivity.this).setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.QZONE)
                        .addButton("umeng_sharebutton_custom","umeng_sharebutton_custom","info_icon_1","info_icon_1")
                        .setShareboardclickCallback(shareBoardlistener).open();

进行设置其中第一个参数是显示的名字,第二个参数是平台名称,第三个参数是按钮图标的图片名字,第四个按钮是置灰情况下按钮图标的图片名字。 注意第一个参数和第二个参数是指字符串写在string文件中的名字,如

    <string name="umeng_sharebutton_custom">自定义分享按钮</string>

第三个参数与第四个参数为图片的名字 对于自定义平台的监听需要使用上面提到的分享面板点击回调,如下:

      private ShareBoardlistener shareBoardlistener = new  ShareBoardlistener() {

        @Override
        public void onclick(SnsPlatform snsPlatform,SHARE_MEDIA share_media) {
            if (share_media==null){
                if (snsPlatform.mKeyword.equals("umeng_sharebutton_custom")){
                    Toast.makeText(ShareActivity.this,"add button success",Toast.LENGTH_LONG).show();
                }

            }
            else {
                new ShareAction(ShareActivity.this).setPlatform(share_media).setCallback(umShareListener)
                        .withText("多平台分享")
                        .share();
            }
        }
    };

新增按钮的回调监听是通过判断当获取平台为空时,keyword的值来进行确定的,并在对应的条件中进行处理即可。