友盟+搜索

{{errorMsg}}

产品概述

Android U-share 6.0sdk是在5.0+的基础上做了进一步的优化,降低了包的大小,对于三方的jar提供了更多选择(精简版,原生版),并提供了更多实用的接口,方便了用户的集成和升级。同时6.0的版本兼容5.0+的版本,老用户,只要替换对应的jar就可以了。 特别提示:之后我们会针对6.0+的版本提供更多方便个性的功能,所以建议用户升级,并留意我们接下来的新功能。

获取友盟Appkey

如果你之前已经在友盟注册了应用,并获取到了Appkey,可以继续使用它.

如果你尚未在友盟注册开发者账号,需要先注册,注册之后登录你的账号,点击添加新应用,填写完应用基本信息后,将进入"下载SDK并添加代码"页面,此页面即可得到Appkey。

下载并安装SDK

下载SDK最新版 如下图所示:

快速集成

AndroidStudio

1)新建立一个工程

2)拷贝jar及res

a.将main文件夹以及platform(选择你想使用的平台即可)文件下,对应的资源文件和jar放入你的工程

例如我想用微信,qq和微博三个平台如下图:

注意:微博平台有.so文件,需要在工程下建立一个jniLib的文件夹,将.so放进去,如下图所示

b.如果不想像a方式一样一个个拷贝,可以使用集成工具umeng_integrate_tool.jar

双击点开这个工具,如下图所示:

选择你想使用的平台,以及你所使用的开发工具,点击ok 会在当前目录下生成一个新的文件夹umeng_integratetool_result 只需将该文件夹下生成的对应文件对应放入你的工程中即可

3)添加对应的回调Activity

包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。这里注意一定是包名路径下,例如我的包名是com.umeng.soexample,则配置如下:
在这里你可能会爆红也可能不爆红这是由于IDE还没有sync刚才放入的jar包。 同理需要建立回调的平台还有支付宝与易信,支付宝是需要建立一个apshare的文件夹,然后建立一个ShareEntryActivity的类,继承ShareCallbackActivity。易信是需要建立一个yxapi的文件夹,建立一个YXEntryActivity的类继承YXCallbackActivity。如果不使用这两个平台可以不用建立。 同理新浪微博也需要一个回调的Activity,与微信不同的是它只需要在包名目录下建立一个名为WBShareActivity类即可,不用建立文件夹,该类继承WBShareCallBackActivity,如下图所示(注意看目录结构)

4)修改AndroidManiFest

首先需要添加权限:
<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.READ_LOGS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.SET_DEBUG_APP" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />

然后加入sdk中需要的Activity:

新浪微博:

 <activity
android: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>
    <activity
        android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
        android:configChanges="keyboardHidden|orientation"
        android:windowSoftInputMode="adjustResize"
        android:exported="false" >
    </activity>
       <service android:name="com.sina.weibo.sdk.net.DownloadService"
        android:exported="false"></service>

微信:

<activity
        android:name=".wxapi.WXEntryActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:exported="true"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />
    <!-- alipay callback-->

支付宝:

qq:

<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="tencent100424468" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.tencent.connect.common.AssistActivity"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:configChanges="orientation|keyboardHidden|screenSize"/>

分享编辑页:

 <activity
        android:name="com.umeng.socialize.editorpage.ShareActivity"
        android:theme="@style/Theme.UMDefault"
        android:excludeFromRecents="true"
        />

其他平台的回调activity请到附录中查询。

添加友盟appkey
<meta-data
        android:name="UMENG_APPKEY"
        android:value="561cae6ae0f55abd990035bf" >
    </meta-data>

5)修改build.gradle文件

将文件夹中的签名文件放入到工程中,例如我的签名文件是debug.keystore
然后增加签名文件的密码:

signingConfigs {
    debug {
        storeFile file('debug.keystore')
        storePassword "android"
        keyAlias "androiddebugkey"
        keyPassword "android"
    }
}

然后在buildTypes中将这个signingConfigs配置进去,如下图所示:
签名文件如果不加,部分平台的授权会受到影响。

6)配置各个平台的appkey

建立一个application文件,随便起一个名字,比如叫App,别忘了在AndroidManifest文件中配置(如果本身已有,不需要重新建立):

 <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:name=".App"
    android:theme="@style/AppTheme">

在application文件中配置三方平台的appkey:

public class App extends Application{
{

    PlatformConfig.setWeixin("wx967daebe835fbeac", "5bb696d9ccd75a38c8a0bfe0675559b3");
    PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad");
    PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");


}
}

7)增加代码

例如我有三个按钮,分别进行qq平台的分享,授权,和打开分享面板:

点击分享按钮:
findViewById(R.id.share).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            new ShareAction(MainActivity.this).setPlatform(SHARE_MEDIA.QQ)
                    .withText("hello")
                    .setCallback(umShareListener)
                    .share();

        }
    });

其中umShareListener为回调监听,构建如下:

private UMShareListener umShareListener = new UMShareListener() {
    @Override
    public void onResult(SHARE_MEDIA platform) {
        Log.d("plat","platform"+platform);
        if(platform.name().equals("WEIXIN_FAVORITE")){
            Toast.makeText(MainActivity.this,platform + " 收藏成功啦",Toast.LENGTH_SHORT).show();
        }else{
            Toast.makeText(MainActivity.this, platform + " 分享成功啦", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onError(SHARE_MEDIA platform, Throwable t) {
        Toast.makeText(MainActivity.this,platform + " 分享失败啦", Toast.LENGTH_SHORT).show();
        if(t!=null){
            Log.d("throw","throw:"+t.getMessage());
        }
    }

    @Override
    public void onCancel(SHARE_MEDIA platform) {
        Toast.makeText(MainActivity.this,platform + " 分享取消了", Toast.LENGTH_SHORT).show();
    }
};

更多分享类型请参见详细集成文档或参照demo。

点击授权按钮:
 findViewById(R.id.auth).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
          UMShareAPI  mShareAPI = UMShareAPI.get( MainActivity.this );
          mShareAPI.doOauthVerify(MainActivity.this, SHARE_MEDIA.QQ, umAuthListener);

        }
    });

其中umAuthListener为授权回调,构建如下:

private UMAuthListener umAuthListener = new UMAuthListener() {
    @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();
    }
};

点击打开面板:
 findViewById(R.id.shareboard).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           new ShareAction(MainActivity.this).withText("hello")
                   .setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN)
                    .setCallback(umShareListener).open();
        }
    });

打开面板的使用方式与分享类似,只是一个设置单一的使用平台,一个设置一个平台list,一个最后调用的是share方法,一个调用open的方法。关于分享面板还有许多拓展功能,可以参照详细集成文档。 最后在Activity的onActivityResult中加入我们的回调

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}

eclipse

1)新建立一个工程

2)拷贝jar及res

a.将main文件夹以及platform(选择你想使用的平台即可)文件下,对应的资源文件和jar放入你的工程

例如我想用微信,qq和微博三个平台如下图:

b.如果不想像a方式一样一个个拷贝,可以使用集成工具umeng_integrate_tool.jar

双击点开这个工具,如下图所示:

选择你想使用的平台,以及你所使用的开发工具,点击ok 会在当前目录下生成一个新的文件夹umeng_integratetool_result 只需将该文件夹下生成的对应文件对应放入你的工程中即可

3)添加对应的回调Activity

包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。这里注意一定是包名路径下,例如我的包名是com.umeng.soexample,则配置如下: 在这里你可能有红线报警也可能没有,这是由于IDE还没有sync刚才放入的jar包。 同理需要建立回调的平台还有支付宝与易信,支付宝是需要建立一个apshare的文件夹,然后建立一个ShareEntryActivity的类,继承ShareCallbackActivity。易信是需要建立一个yxapi的文件夹,建立一个YXEntryActivity的类继承YXCallbackActivity。如果不使用这两个平台可以不用建立。 同理新浪微博也需要一个回调的Activity,与微信不同的是它只需要在包名目录下建立一个名为WBShareActivity类即可,不用建立文件夹,该类继承WBShareCallBackActivity,如下图所示(注意看目录结构)

4)修改AndroidManiFest

首先需要添加权限:
<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.READ_LOGS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.SET_DEBUG_APP" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />

然后加入sdk中需要的Activity:

新浪微博:

 <activity
android: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>
    <activity
        android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
        android:configChanges="keyboardHidden|orientation"
        android:windowSoftInputMode="adjustResize"
        android:exported="false" >
    </activity>
       <service android:name="com.sina.weibo.sdk.net.DownloadService"
        android:exported="false"></service>

微信:

<activity
        android:name=".wxapi.WXEntryActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:exported="true"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />
    <!-- alipay callback-->

支付宝

qq:

<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="tencent100424468" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.tencent.connect.common.AssistActivity"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:configChanges="orientation|keyboardHidden|screenSize"/>

分享编辑页:

 <activity
        android:name="com.umeng.socialize.editorpage.ShareActivity"
        android:theme="@style/Theme.UMDefault"
        android:excludeFromRecents="true"
        />

其他平台的回调activity请到附录中查询。

添加友盟appkey
<meta-data
        android:name="UMENG_APPKEY"
        android:value="561cae6ae0f55abd990035bf" >
    </meta-data>

5)引入签名文件

在eclipse的工程设置中设置签名,将Custom debug keystore设置成你应用的签名文件(有些工程已经默认设置好了,可以跳过)例如我的签名文件是debug.keystore

6)配置各个平台的appkey

建立一个application文件,随便起一个名字,比如叫App,别忘了在AndroidManifest文件中配置(如果本身已有,不需要重新建立):

 <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:name=".App"
    android:theme="@style/AppTheme">

在application文件中配置三方平台的appkey:

public class App extends Application{
{

    PlatformConfig.setWeixin("wx967daebe835fbeac", "5bb696d9ccd75a38c8a0bfe0675559b3");
    PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad");
    PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");


}
}

7)增加代码

例如我有三个按钮,分别进行qq平台的分享,授权,和打开分享面板:

点击分享按钮:
findViewById(R.id.share).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            new ShareAction(MainActivity.this).setPlatform(SHARE_MEDIA.QQ)
                    .withText("hello")
                    .setCallback(umShareListener)
                    .share();

        }
    });

其中umShareListener为回调监听,构建如下:

private UMShareListener umShareListener = new UMShareListener() {
    @Override
    public void onResult(SHARE_MEDIA platform) {
        Log.d("plat","platform"+platform);
        if(platform.name().equals("WEIXIN_FAVORITE")){
            Toast.makeText(MainActivity.this,platform + " 收藏成功啦",Toast.LENGTH_SHORT).show();
        }else{
            Toast.makeText(MainActivity.this, platform + " 分享成功啦", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public void onError(SHARE_MEDIA platform, Throwable t) {
        Toast.makeText(MainActivity.this,platform + " 分享失败啦", Toast.LENGTH_SHORT).show();
        if(t!=null){
            Log.d("throw","throw:"+t.getMessage());
        }
    }

    @Override
    public void onCancel(SHARE_MEDIA platform) {
        Toast.makeText(MainActivity.this,platform + " 分享取消了", Toast.LENGTH_SHORT).show();
    }
};

更多分享类型请参见详细集成文档或参照demo。

点击授权按钮:
 findViewById(R.id.auth).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
          UMShareAPI  mShareAPI = UMShareAPI.get( MainActivity.this );
          mShareAPI.doOauthVerify(MainActivity.this, SHARE_MEDIA.QQ, umAuthListener);

        }
    });

其中umAuthListener为授权回调,构建如下:

private UMAuthListener umAuthListener = new UMAuthListener() {
    @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();
    }
};

点击打开面板:
 findViewById(R.id.shareboard).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
           new ShareAction(MainActivity.this).withText("hello")
                   .setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN)
                    .setCallback(umShareListener).open();
        }
    });

打开面板的使用方式与分享类似,只是一个设置单一的使用平台,一个设置一个平台list,一个最后调用的是share方法,一个调用open的方法。关于分享面板还有许多拓展功能,可以参照详细集成文档。 最后在Activity的onActivityResult中加入我们的回调

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}

详细集成文档

单平台分享进阶

新浪微博

对于新浪微博我们提供两种jar,满足不同的开发者要求

原生sdk

使用platform/sina下的jar和res即可 就如前面快速集成文档中的方式集成,一定要保证签名和包名的正确,同时回调地址一定要正确 在新浪应用的后台,看下你们设置的回调地址:

如果是如图所示的地址,则不需要什么,如是你们自己写的地址,请在调用分享前,设置

 Config.REDIRECT_URL = "yourpath"

为你的回调地址 原生sdk更加安全稳定适配性也更强,但是jar和so过大

umeng sina sdk

使用platform/umengsina下的jar和res即可 用这种方式集成,不需要添加WBShareActivity,也不需要前面所述的关于新浪的AndroidManifest配置 使用这种方式,jar包只有不到20k,需要在友盟后台配置你的appkey和appsecret,这样的配置更加安全。

微信

原生sdk

使用platform/weixin下的jar和res即可 就如前面快速集成文档中的方式集成,一定要保证签名和包名的正确。不然授权不能成功 如果使用微信支付的应用开发者可以使用这个包,将你们工程中原有的支付去掉即可(不然会出现jar重复的问题,我们SocialSDK_WeiXin_1就是原生微信jar)

umeng 微信 sdk

使用platform/umengwx下的jar和res即可 集成方式与前者一样,不同的是jar中去掉了支付的相关功能,包更小。对于个人开发者而言,如果需要上传百度市场等,会检测支付相关sdk,所以推荐用这个包。

支付宝

如前面快速集成文档所示需要像微信一样添加一个回调的Activity,在包名目录下建立一个文件夹apshare,在这个文件夹中新建一个类

public class ShareEntryActivity extends ShareCallbackActivity{
}

同时在AndroidManifest中添加对应的配置

 <activity
        android:name=".apshare.ShareEntryActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:exported="true"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />

易信

如前面快速集成文档所示需要像微信一样添加一个回调的Activity,在包名目录下建立一个文件夹yxapi,在这个文件夹中新建一个类

public class YXEntryActivity extends YXCallbackActivity {

}

同时在AndroidManifest中添加对应的配置

  <activity
        android:name=".yxapi.YXEntryActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:exported="true"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />

facebook

facebook需要像前面快速集成文档中写的一样,配置appkey,同时在AndroidManifest中配置:

<activity
        android:name="com.facebook.FacebookActivity"
        android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />
    <provider
        android:name="com.facebook.FacebookContentProvider"
        android:authorities="com.facebook.app.FacebookContentProvider487692214752558"
        android:exported="true" />

    <meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/facebook_app_id" />

其中487692214752558是facebook的appid

twitter

twitter需要像前面快速集成文档中写的一样,配置appkey,同时在AndroidManifest中配置:

        <activity
        android:name="com.umeng.socialize.handler.TwitterWebActivity"
        android:configChanges=
            "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:label="@string/app_name" />

豆瓣人人腾讯微博

这个三个平台不需要在程序中设置appkey,jar包放进去就可以使用,但是需要将appkey设置在友盟的后台。

分享内容进阶

对于分享内容可以有如下设置

设置分享图片

在使用shareaction的时候,调用withMedia可以设置一个UMImage,也就是分享图片,分享图片的构建有如下几种形式

UMImage image = new UMImage(ShareActivity.this, "imageurl");//网络图片
UMImage image = new UMImage(ShareActivity.this, file);//本地文件
UMImage image = new UMImage(ShareActivity.this, R.drawable.xxx);//资源文件
UMImage image = new UMImage(ShareActivity.this, bitmap);//bitmap文件
UMImage image = new UMImage(ShareActivity.this, byte[]);//字节流

推荐使用网络图片和资源文件的方式,平台兼容性更高。 创建好UMImage之后调用分享即可,如下所示:

new ShareAction(ShareActivity.this).withText("hello")
.withMedia(image).share();

设置分享链接

分享链接可以使用withTargetUrl("http://xxxx") 注意一定是http://或https://开头的网址

new ShareAction(ShareActivity.this).withText("hello")
.withMedia(image)
.withTargetUrl(xxx)
.share();

对于有些平台设置链接和图片同时分享的时候,图片会成为这个linkcard的缩略图,所以这种情况图片不要设置过大,一般缩略图最好在24k左右,可以调用我们后面提供的压缩接口进行压缩。

设置标题

标题一般是用于网络链接分享的标题,可以使用withTitle进行设置

new ShareAction(ShareActivity.this).withText("hello")
.withMedia(image)
.withTargetUrl(xxx)
.withTitle(xxxx)
.share();

设置分享音乐

音乐只能使用网络音乐:

UMusic music = new UMusic(musicurl);
music.setTitle("This is music title");//音乐的标题
    music.setThumb("http://www.umeng.com/images/pic/social/chart_1.png");//音乐的缩略图
    music.setDescription("my description");//音乐的描述

建立好之后可以进行分享:

new ShareAction(ShareActivity.this).withText("hello")
.withMedia(music).share();      

设置分享视频

音乐只能使用网络视频:

  UMVideo video = new UMVideo(videourl);
video.setTitle("This is music title");//视频的标题
    video.setThumb("http://www.umeng.com/images/pic/social/chart_1.png");//视频的缩略图
    video.setDescription("my description");//视频的描述

建立好之后可以进行分享:

new ShareAction(ShareActivity.this).withText("hello")
.withMedia(video).share(); 

设置分享文件

分享文件是有微信收藏和邮件中可以使用,别的平台无效,使用的文件不要超过10M

    new ShareAction(ShareActivity.this).withText("hello")
.withFile(file).share();  

各平台可分享内容预览

平台 授权 可分享内容 用户信息
qq 文本 图片 链接 视频 音乐
qq空间 同qq 文字(说说) 图片(说说) 链接 视频 音乐 同qq
微信 文本 图片 链接 视频 音乐
微信朋友圈 同微信 文本 图片 链接 视频 音乐 同微信
微信收藏 同微信 文本 图片 链接 视频 音乐 文件 同微信
腾讯微博 是(网页) 文本 图文 图片 链接 视频 音乐
腾讯微博 是(网页) 文本 图文 图片 链接 视频 音乐
新浪微博 文本 图文 图片 链接 视频 音乐
facebook 文本 图文 图片 链接 视频 音乐
twitter 文本 图文 图片
Instagram 图片
line 文字 图片 图文
whatsapp 文字 图片 图文
Pinterest 图片 图文
支付宝 文本 图片
易信聊天 文本 图片 链接 视频 音乐
易信朋友圈 文本 图片 链接 视频 音乐
人人 是 (网页) 文本 图文 图片 链接 视频 音乐
豆瓣 是 (网页) 文本 图文 图片 链接 视频 音乐
点点虫聊天 否(网页) 文本 图文 图片 链接 视频 音乐
点点虫动态 否(网页) 文本 图文 图片 链接 视频 音乐
Linkedin 文本 图文 图片 链接 视频 音乐
短信 文本 图文 图片 链接
邮件 文本 图文 图片 链接 文件
Thumblr 文字 图片 图文
flickr 图片
kakao 文字 图片 图文
googleplus 文字 图片 图文
印象笔记 文字 图片 图文
有道笔记 文字 图片 图文
pocket 链接
foursquare 图片

分享面板进阶

普通分享面板

如快速集成文档所示

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

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

  new ShareAction(ShareMenuActivity.this).setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.QZONE,SHARE_MEDIA.WEIXIN,SHARE_MEDIA.WEIXIN_CIRCLE)
                    .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的值来进行确定的,并在对应的条件中进行处理即可。

获取用户信息

实现

已授权的平台,可以获取用户信息(新浪微博可以获取用户好友列表),

实现的方法与授权和解除授权类似:

mShareAPI = UMShareAPI.get(this);

初始化UMShareAPI,然后进行用户信息获取:

mShareAPI.getPlatformInfo(UserinfoActivity.this, SHARE_MEDIA.SINA, umAuthListener);

用户资料基本信息解析如下

在返回的map中各个信息对应的key值如下

  • 新浪微博

    字段名 含义
    id 用户id
    screen_name 用户名
    location 位置
    profile_image_url 头像
    screen_name 用户名
    gender 性别
    followers_count 关注数
    friends_count 好友数

    用户id:id 用户名:screen_name 位置:location 头像:profile_image_url 性别:gender 关注数:followers_count 好友数:friends_count

    • qq

    name:screenname 性别:gender 头像:profile_image_url 是否黄钻:is_yellow_year_vip 黄钻等级:yellow_vip_level 城市:city 省份:province

    • 微信

    openid:openid name:screenname 城市:city 省份:prvinice 国家:country 性别:gender 头像:profile_image_url

    特殊功能进阶

    android6.0适配

    因为分享授权中需要使用一些对应的权限,如果你的targetSdkVersion设置的是23或更高,需要提前获取权限。(如果targetSdkVersion是22或以下,可以忽略该问题) 使用AppCompatActivity.checkSelfPermission(Manifest.permission.xxxx)可以判断权限的授权情况。 使用

                if(Build.VERSION.SDK_INT>=23){
                    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.WRITE_EXTERNAL_STORAGE,Manifest.permission.SET_DEBUG_APP,Manifest.permission.SYSTEM_ALERT_WINDOW,Manifest.permission.GET_ACCOUNTS,Manifest.permission.WRITE_APN_SETTINGS};
                    ActivityCompat.requestPermissions(this,mPermissionList,123);
                }
    
    

    可以请求权限。

    获取客户端安装信息

    使用如下接口

    mShareAPI.isInstall(this, SHARE_MEDIA.WEIXIN)

    获取客户端api是否支持的接口

    mShareAPI.isSupport(this, SHARE_MEDIA.WEIXIN)

    获取当前使用sdk的版本号

    mShareAPI.getversion(this, SHARE_MEDIA.WEIXIN)

    qq微信授权防杀死

    对于的低端手机可能会有如下问题,从开发者app调到qq或者微信的授权界面,后台把开发者app杀死了,这样,授权成功没有回调了,可以用如下方式避免:(一般不需要添加,如有特殊需要,可以添加)

    对于qq:

    在onActivityResult中加入如下一段话:

         @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).HandleQQError(AuthActivity.this,requestCode,umAuthListener);
        mShareAPI.onActivityResult(requestCode, resultCode, data);
    }
    
    

    对于微信:

    在WXEntryActivity文件中加入下面代码:

    @Override
    protected void handleIntent(Intent intent){
    
        mWxHandler.setAuthListener(new UMAuthListener() {
            @Override
            public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
                Log.e("UMWXHandler fsdfsdfs");
            }
    
            @Override
            public void onError(SHARE_MEDIA platform, int action, Throwable t) {
    
            }
    
            @Override
            public void onCancel(SHARE_MEDIA platform, int action) {
    
            }
        });
        super.handleIntent(intent);
    }
    
    

    关闭log和toast方法:

    Log.LOG = false

    Config.IsToastTip = false

    file转byte

    SocializeUtils.File2byte()
    
    

    bitmap转byte

    BitmapUtils.bitmap2Bytes(bitmap)
    
    

    图片压缩到指定大小

    BitmapUtils.compressBitmap(byte[],count)
    
    

    第一个参数是图片的字节流,Count为图片最大的字节数

    开发者调试工具

    在demo中有一个自检工具,可以帮助开发者迅速定位主流平台的常见错误(集成工具为调试期间的工具,开发者上线自行去掉调用即可)

    签名问题

    在程序中加入UmengTool.getSignature(activity);的调用,打出apk签名包。会显示当前签名包的签名,这是这个签名与申请时的签名作对比看是否一样

    检查回调地址

    对于新浪微博,有一个回调地址,调用UmengTool.getREDICRECT_URL(activity);可以打印出当前设置的回调地址,与申请时的作对比,看是否一样

    检查回调Activity

    对于微信新浪支付宝平台,都需要一个回调的activity,调用对应的方法( UmengTool.checkSina(activity))可以检查平台配置是否正确

    附录

    混淆文件

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

    -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 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     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{*;}
    
    -dontwarn twitter4j.**
    -keep class twitter4j.** { *; }
    
    -keep class com.tencent.** {*;}
    -dontwarn com.tencent.**
    -keep public class com.umeng.soexample.R$*{
    public static final int *;
    }
    -keep public class com.umeng.soexample.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    接口未授权