这几天需要做分享,一开始使用的是ShsreSDK分享,基本也已加入项目中,但是老板说使用友盟分享,那就改呗,从此在坑的道路上越走越远
1.首先是进入友盟官网去申请账号:http://mobile.umeng.com/social
2.当然是要去第三方的网站去申请了,微信,QQ,新浪
然后我再微信的应用签名那里就遇到了坑,需要上传一个应用签名和包名,签名我以为是SHA1,其实是MD5啊!!!怪不得老板告诉我已经申请好了,但是我这里还是不能调起微信分享,是自己理解错了!!!
我使用的是AndroidStudio,如果要生成签名,可以看一下这篇文章:
安卓学习笔记---Android Studio生成签名文件,自动签名,以及获取SHA1和MD5值
还有就是当你重新修改了签名在微信平台上之后,是可以立即生效的,但是你或许应该先把微信卸载,在重新安装一下,因为可能会有缓存,导致新的签名不能生效,可以看一下这篇文章
微信支付应用签名写错修改会立即生效和后面的坑
http://jingyan.baidu.com/article/03b2f78c0f8fec5ea237aeb6.html
3.下面就是去官网下载sdk以及需要的一些文件了
http://dev.umeng.com/social/android/quick-integration#3_2 这个是步骤,可以一步一步跟着做
现在的友盟进行了更新,和原来的不太一样了
下载sdk之后,解压出现的目录如下
记得要把标注的文件夹里面的所有内容都复制到项目中去,按照官网说的,但是运行之后,发现少了一些jar包或者文件,全部复制进去之后就好,在这部分也遇到了坑,全部复制进去之后,项目的目录基本如下:
4. AndroidManifest.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" />
<application
android:name=".BaseApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!--分享相关-->
<meta-data
android:name="UMENG_APPKEY"
android:value="在友盟官网创建应用获得的appkey" >
</meta-data>
<!--新浪-->
<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" />
<!--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"/>
</application>
5.里面有一句
android:name=".BaseApplication",创建这个BaseApplication,基本内容如下
public class BaseApplication extends Application {
static {
PlatformConfig.setWeixin("wx555cfv6666fgtgfvdfc1577cd", "axasxasxhjasx6u67i78q223237i89a9f51638");
PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad", "http://sns.whalecloud.com");
}
@Override
public void onCreate() {
super.onCreate();
UMShareAPI.get(this);
}
}
根据从不同的平台得到的,进行替换即可
6.下面附上自己写的
/**
* 友盟分享接入
* http://dev.umeng.com/social/android/share-detail
*/
public class MainActivity extends AppCompatActivity {
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context=MainActivity.this;
//Config.DEBUG = true;
findViewById(R.id.btn_share).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// UmengTool.checkWx(MainActivity.this);
//设置分享图片
UMImage image = new UMImage(MainActivity.this, "imageurl");//网络图片
//推荐使用网络图片和资源文件的方式,平台兼容性更高。 对于微信QQ的那个平台,分享的图片需要设置缩略图,缩略图的设置规则为:
UMImage thumb = new UMImage(MainActivity.this, R.drawable.thumb);
image.setThumb(thumb);
//用户设置的图片大小最好不要超过250k,缩略图不要超过18k,如果超过太多(最好不要分享1M以上的图片,压缩效率会很低),图片会被压缩。 用户可以设置压缩的方式:
// 压缩格式设置:
image.compressStyle = UMImage.CompressStyle.SCALE;//大小压缩,默认为大小压缩,适合普通很大的图
// image.compressStyle = UMImage.CompressStyle.QUALITY;//质量压缩,适合长图的分享
// image.compressFormat = Bitmap.CompressFormat.PNG;//用户分享透明背景的图片可以设置这种方式,但是qq好友,微信朋友圈,不支持透明背景图片,会变成黑色
//设置分享链接
//分享链接可以使用UMWeb进行分享:
//注意在新浪平台,缩略图属于必传参数,否则会报错
UMWeb web = new UMWeb("http://www.baidu.com");
web.setTitle("连接标题");//标题
web.setThumb(thumb); //缩略图
web.setDescription("描述");//描述
new ShareAction(MainActivity.this).withText("分享内容")//分享内容
.withMedia(image)//分享图片
.withMedia(web) //分享链接
.setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.QZONE,SHARE_MEDIA.WEIXIN,SHARE_MEDIA.WEIXIN_CIRCLE)
.setCallback(umShareListener).open();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
private UMShareListener umShareListener = new UMShareListener() {
@Override
public void onStart(SHARE_MEDIA platform) {
//分享开始的回调
}
@Override
public void onResult(SHARE_MEDIA platform) {
Log.d("plat","platform"+platform);
if(SHARE_MEDIA.SINA.equals(platform))
{
Toast.makeText(context, " 新浪微博分享成功啦", Toast.LENGTH_SHORT).show();
}else if(SHARE_MEDIA.QQ.equals(platform))
{
Toast.makeText(context," QQ分享成功啦", Toast.LENGTH_SHORT).show();
}else if(SHARE_MEDIA.QZONE.equals(platform))
{
Toast.makeText(context," QQ空间分享成功啦", Toast.LENGTH_SHORT).show();
}else if(SHARE_MEDIA.WEIXIN.equals(platform))
{
Toast.makeText(context," 微信分享成功啦", Toast.LENGTH_SHORT).show();
}else if(SHARE_MEDIA.WEIXIN_CIRCLE.equals(platform))
{
Toast.makeText(context," 朋友圈分享成功啦", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
if(SHARE_MEDIA.SINA.equals(platform))
{
Toast.makeText(context," 新浪微博分享失败啦", Toast.LENGTH_SHORT).show();
}else if(SHARE_MEDIA.QQ.equals(platform))
{
Toast.makeText(context," QQ分享失败啦", Toast.LENGTH_SHORT).show();
}else if(SHARE_MEDIA.QZONE.equals(platform))
{
Toast.makeText(context," QQ空间分享失败啦", Toast.LENGTH_SHORT).show();
}else if(SHARE_MEDIA.WEIXIN.equals(platform))
{
Toast.makeText(context," 微信分享失败啦", Toast.LENGTH_SHORT).show();
}else if(SHARE_MEDIA.WEIXIN_CIRCLE.equals(platform))
{
Toast.makeText(context," 朋友圈分享失败啦", Toast.LENGTH_SHORT).show();
}
if(t!=null){
Log.d("throw","throw:"+t.getMessage());
}
}
@Override
public void onCancel(SHARE_MEDIA platform) {
if(SHARE_MEDIA.SINA.equals(platform))
{
Toast.makeText(context," 新浪微博分享取消了", Toast.LENGTH_SHORT).show();
}else if(SHARE_MEDIA.QQ.equals(platform))
{
Toast.makeText(context," QQ分享取消了", Toast.LENGTH_SHORT).show();
}else if(SHARE_MEDIA.QZONE.equals(platform))
{
Toast.makeText(context," QQ空间分享取消了", Toast.LENGTH_SHORT).show();
}else if(SHARE_MEDIA.WEIXIN.equals(platform))
{
Toast.makeText(context," 微信分享取消了", Toast.LENGTH_SHORT).show();
}else if(SHARE_MEDIA.WEIXIN_CIRCLE.equals(platform))
{
Toast.makeText(context," 朋友圈分享取消了", Toast.LENGTH_SHORT).show();
}
}
};
@Override
protected void onDestroy() {
super.onDestroy();
UMShareAPI.get(this).release();//防止内存泄漏
}
}
注意:
Config.DEBUG = true;这个是可以在DEBUG下可以看到一些分享的输出,便于查看
UmengTool.checkWx(MainActivity.this);这一句是我的微信一直调不出来,加上的,可以查看你的签名和包名是否正确我也是这样查看之后才知道自己的签名出现了问题的在这里记录下来,以后少走弯路吧,毕竟时间真的耗不起啊!!!最后运行之后显示的效果