ShareSDK的集成分享(Android)

shareSDK官方文档:http://wiki.mob.com/android-sharesdk完整的集成文档/

具体使用

1.首先过一遍官网集成文档,了解具体步骤

准备工作:mob平台官网注册账号登录并从官网后台创建应用生成appkey和appSecret,下载所需分享平台的SDK。
集成工作:解压SDK,导入jar包,导入ShareSDK.xml文件,配置AndroidManifest.xml文件,调用showShare()方法,这个方法官方文档有给。
2具体填坑之路,完成需求
由于项目需求,我的集成仅包含QQ、微信、朋友圈。
坑num1:AndroidManifest.xml文件中需要填写自己申请的appkey和appSecret,QQ回调要自己申请的appid。android:name=".wxapi.WXEntryActivity"会出现错误,将SDK下的对应类导入即可
ShareSDK的集成分享(Android)_第1张图片

ShareSDK的集成分享(Android)_第2张图片

坑num2:ShareSDK.xml中对应的第三方平台的AppId、AppSecret需在对应开放平台注册。QQ中的BypassApproval设置成false,亲测(分享连接的时候只有文本消息,标题链接等都分享失败)。Ps:研究了一下午,不知道官方文档为什么是true。

ShareSDK的集成分享(Android)_第3张图片
坑num3:分享页面下面小尾巴(即分享的来源),这个需要在开放平台添加app的信息,保证统一性,具体参考官方文档。
坑num4:分享页面的图片显示,以下是官方文档内容
oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片。
看到这种,我们很明显会改成
oks.setImagePath("file:///android_asset/test.jpg");
看上去毫无破绽,其实这样根本实现不了功能,图片还是没能传过来。
在此,笔者采用了一个先从app得到图片资源,然后保存到本地,再读取ImagePath,以确保SDcard中存在此图片。不知道看官有啥好的方法提供,我好优化下我的工具类。
ShareSDK的集成分享(Android)_第4张图片
我的工具类会在最后贴出。
3总结
即使看着文档集成,想达到自己想要的,还是没那么简单。第一篇博客,加油,么么哒!!!
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;

import com.aisino.wsbs.ahgs_wsbs.common.R;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import cn.sharesdk.onekeyshare.OnekeyShare;

/**
 * 开发人: 酥小鱼
 * 时间: 2017/12/4.
 * 版本: V 1.0
 * 所在包: com.aisino.wsbs.ahgs_wsbs.common.utils
 * 内容:分享的工具类
 */

public class ShareUtil {
    private static String bitmapPath;

    public ShareUtil() {
    }

    public static void showShare(Context context, String string, String url, String string2) {
        OnekeyShare oks = new OnekeyShare();
        //关闭sso授权
        oks.disableSSOWhenAuthorize();

        // title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间等使用
        oks.setTitle(string2);
        // titleUrl是标题的网络链接,QQ和QQ空间等使用
        oks.setTitleUrl(url);
        // text是分享文本,所有平台都需要这个字段
        oks.setText(string);
        // imagePath是图片的本地路径,Linked-In以外的平台都支持此参数

        Resources res = context.getResources();
        Bitmap bmp = BitmapFactory.decodeResource(res, R.mipmap.common_ic_launcher);
        bitmapPath = takePicRootDir(context);
        saveBitmap(bmp);
        oks.setImagePath(bitmapPath);
//        oks.setImageData(new String(datas));//确保SDcard下面存在此张图片
        // url仅在微信(包括好友和朋友圈)中使用
        oks.setUrl(url);
        // 启动分享GUI
        oks.show(context);

    }

    private static void saveBitmap(Bitmap bitmap) {

        File file = new File(bitmapPath);
        if (file.exists()) {
            file.delete();
        }
        FileOutputStream out;
        try {
            out = new FileOutputStream(file);
            if (bitmap.compress(Bitmap.CompressFormat.PNG, 90, out)) {
                out.flush();
                out.close();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 判断当前存储卡是否可用
     **/
    public static boolean checkSDCardAvailable() {
        return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
    }

    /**
     * 获取当前需要查询的文件夹
     **/
    public static String takePicRootDir(Context context) {
        if (checkSDCardAvailable()) {
            return Environment.getExternalStorageDirectory() + File.separator + "ic_launch.png";
        } else {
            return context.getFilesDir().getAbsolutePath() + File.separator + "ic_launch.png";
        }
    }
    public static String takePicRootDir1(Context context) {
        if (checkSDCardAvailable()) {
            return Environment.getExternalStorageDirectory() + File.separator + "ewm.png";
        } else {
            return context.getFilesDir().getAbsolutePath() + File.separator + "ewm.png";
        }
    }
    public static void showShareImage(Context context){
        OnekeyShare oks = new OnekeyShare();
        //关闭sso授权
        oks.disableSSOWhenAuthorize();
        // title标题,印象笔记、邮箱、信息、微信、人人网、QQ和QQ空间使用
        oks.setTitle("");
        // titleUrl是标题的网络链接,仅在Linked-in,QQ和QQ空间使用
        oks.setTitleUrl("");
        // text是分享文本,所有平台都需要这个字段
        oks.setText("");
        //分享网络图片,新浪微博分享网络图片需要通过审核后申请高级写入接口,否则请注释掉测试新浪微博
//        oks.setImageUrl("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg");
        // imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
        Resources res = context.getResources();
        Bitmap bmp = BitmapFactory.decodeResource(res, R.mipmap.common_ewm);
        bitmapPath = takePicRootDir1(context);
        saveBitmap(bmp);
        oks.setImagePath(bitmapPath);
        oks.setUrl("");
        // comment是我对这条分享的评论,仅在人人网和QQ空间使用
        oks.setComment("");
        // site是分享此内容的网站名称,仅在QQ空间使用
        oks.setSite("test");
        // siteUrl是分享此内容的网站地址,仅在QQ空间使用
        oks.setSiteUrl("");

// 启动分享GUI
        oks.show(context);
    }

}

如有错误或者不足,欢迎指出


  


你可能感兴趣的:(Android重难点学习)