友盟分享、第三方登录

产品概述

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和微博三个平台如下图:


<font color=#0099ff size=5 face="黑体">注意:微博平台有.so文件,需要在工程下建立一个jniLib的文件夹,将.so放进去,如下图所示</font>


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-->

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

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-->

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

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|
| 微信 | 是 | 文本 图片 链接 视频 音乐 |是|
| 微信朋友圈 | 同微信 | 文本 图片 链接 视频 音乐 |同微信|
| 微信收藏 | 同微信 | 文本 图片 链接 视频 音乐 文件 |同微信|
| 腾讯微博 | 是(网页) | 文本 图文 图片 链接 视频 音乐 |否|
| 新浪微博 | 是 | 文本 图文 图片 链接 视频 音乐 |是|
| 支付宝 | 否 | 文本 图片 |否|
| 易信聊天 | 否 | 文本 图片 链接 视频 音乐 |否|
| 易信朋友圈 | 否 | 文本 图片 链接 视频 音乐 |否|
| 人人 | 是 (网页) | 文本 图文 图片 链接 视频 音乐 |否|
| 豆瓣 | 是 (网页) | 文本 图文 图片 链接 视频 音乐 |否|
| 点点虫聊天 | 否 | 文本 图文 图片 链接 视频 音乐(点点虫分享已经在最新版的软件中不能使用,点点虫改为了直播软件) |否|
| 点点虫动态 | 否 | 文本 图文 图片 链接 视频 音乐 |否|
| Linkedin | 是 | 文本 图文 图片 链接 视频 音乐 |否|
| 短信 | 否 | 文本 图文 图片 链接 |否|
| 邮件 | 否 | 文本 图文 图片 链接 文件 |否|
| facebook | 是 | 文本 图文 图片 链接 视频 音乐 |是|
| twitter | 否 | 文本 图文 图片 |否|
| Instagram | 否 | 图片 |否|
| Pinterest | 否 | 图片 图文 |否|
| Thumblr | 否 | 文字 图片 图文 |否|
| line | 否 | 文字 图片 图文 |否|
| whatsapp | 否 | 文字 图片 图文 |否|
| 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 性别: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    接口未授权    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容