《插件自助开发——分享类插件》

分享系统

分享系统目前采用ShareSDK的一键分享,支持新浪微博、QQ空间、微信(好友、朋友、收藏)、QQ好友、腾讯微博、人人网、易信(好友、朋友圈)的分享功能。本文介绍了如何接入SDK的分享服务。

构造函数和初始化

分享系统的类一般命名为"Share+插件名",构造函数参数为Context,是主Activity的Context。在构造函数中实现初始化SDK等。

public class ShareShareSDK implements InterfaceShare {
  private static final String SDK_VERSION = "2.5.9";
  private static final String PLUGIN_VERSION = "2.0.3_"+SDK_VERSION;
  private static final String PLUGIN_ID = "23";
  private Context context;
  private static ShareShareSDK mshare = null;
  private static boolean isDebug = false;

  public ShareShareSDK(Context context) {
    this.context = context;
    this.mshare = this;
    configDeveloperInfo(Wrapper.getDeveloperInfo());
  }

  private void configDeveloperInfo(Hashtable<String, String> cpInfo) {
     PluginWrapper.runOnMainThread(new Runnable() {
        public void run() {
            ShareSDK.initSDK(context);
        }
     });
 }

分享类ShareShareSDK实现了InterfaceShare接口。
anysdk框架可以通过ShareShareSDK(Context context)方法实例化分享类。
开发者需要在configDeveloperInfo(Hashtable cpInfo)方法中实现分享SDK的初始化操作。

InterfaceShare

分享类插件需要实现接口InterfaceShare,接口中没有的方法,开发者可以自定义拓展。在InterfaceShare接口中,有如下函数:

public void share(Hashtable<String, String> cpInfo) //分享
public void setDebugMode(boolean paramBoolean);     // 设置调试模式(已废弃)
public String getSDKVersion();      //获取SDK 版本号
public String getPluginVersion();   //获取插件版本号

分享

public void share(Hashtable cpInfo)
功能说明:参数cpInfo包含分享相关的信息。例如需要分享的标题,文本,图片,链接等信息。
举例说明:在share方法中,我们从cpInfo中获得数据,组装成shareSDK需要的参数,调用ShareSDK的分享方法oks.show。

public void share(final Hashtable<String, String> cpInfo) {
 PluginWrapper.runOnMainThread(new Runnable() {
    public void run() {
        if (cpInfo == null) {
            shareResult(ShareWrapper.SHARERESULT_FAIL, "share param is null");
            return ;
        }
        if (!(cpInfo.containsKey("title")&&cpInfo.containsKey("titleUrl")&&cpInfo.containsKey("site")&&cpInfo.containsKey("siteUrl")))
        {
            shareResult(ShareWrapper.SHARERESULT_FAIL, "share param is incomplete");
            return ;
        }

        OnekeyShare oks = new OnekeyShare();
        oks.setTitle(cpInfo.get("title"));
        oks.setTitleUrl(cpInfo.get("titleUrl"));
        oks.setSite(cpInfo.get("site"));
        oks.setSiteUrl(cpInfo.get("siteUrl"));


        if (cpInfo.containsKey("imagePath")) {
            oks.setImagePath(cpInfo.get("imagePath"));
        }
        if (cpInfo.containsKey("imageUrl")) {
            oks.setImageUrl(cpInfo.get("imageUrl"));
        }

        if (cpInfo.containsKey("text")) {
            oks.setText(cpInfo.get("text"));
        }
        if (cpInfo.containsKey("comment")) {
            oks.setComment(cpInfo.get("comment"));
        }
        if (cpInfo.containsKey("url")) {
            oks.setUrl(cpInfo.get("url"));
        }
        if (cpInfo.containsKey("dialogMode") && "true".equals(cpInfo.get("dialogMode"))) {
            oks.setDialogMode();
        }

        if (cpInfo.containsKey("latitude")) {
            oks.setLatitude(Float.parseFloat(cpInfo.get("latitude")));
        }
        if (cpInfo.containsKey("longitude")) {
            oks.setLongitude(Float.parseFloat(cpInfo.get("longitude")));
        }
        if(cpInfo.containsKey("theme") && cpInfo.get("theme").toLowerCase().equals("skyblue")){
            oks.setTheme(OnekeyShareTheme.SKYBLUE);
        }else{
            oks.setTheme(OnekeyShareTheme.CLASSIC);
        }
        oks.setSilent(false);
        oks.disableSSOWhenAuthorize();
        oks.setCallback(new PlatformActionListener() {

            @Override
            public void onError(Platform arg0, int arg1, Throwable arg2) {
                shareResult(ShareWrapper.SHARERESULT_FAIL, arg2.getMessage());
            }

            @Override
            public void onComplete(Platform arg0, int arg1, HashMap<String, Object> arg2) {
                shareResult(ShareWrapper.SHARERESULT_SUCCESS, arg2.toString());
            }

            @Override
            public void onCancel(Platform arg0, int arg1) {
                shareResult(ShareWrapper.SHARERESULT_CANCEL, "shareSdk oncancel");
            }
        });
        oks.show(context);
    }
  });
}

分享参数如下表

参数 是否必传 参数说明
title Y title标题,在印象笔记、邮箱、信息、微信(包括好友、朋友圈和收藏)、 易信(包括好友、朋友圈)、人人网和QQ空间使用
titleUrl Y titleUrl是标题的网络链接,仅在人人网和QQ空间使用
site Y site是分享此内容的网站名称,仅在QQ空间使用
siteUrl Y siteUrl是分享此内容的网站地址,仅在QQ空间使用
text N text是分享文本,所有平台都需要这个字段
imagePath N imagePath是本地的图片路径,除Linked-In外的所有平台都支持这个字段
imageUrl N imageUrl是图片的网络路径,新浪微博、人人网、QQ空间和Linked-In支持此字段
dialogMode N 编辑分享内容的模式,默认全屏false,对话框为true
comment N comment是我对这条分享的评论,仅在人人网和QQ空间使用
url N 在微信(包括好友、朋友圈收藏)和易信(包括好友和朋友圈)中使用
theme N 设置主题,默认为传统主题,可传"skyblue"修改主题
latitude N 分享地纬度,新浪微博、腾讯微博和foursquare支持此字段
longitude N 分享地经度,新浪微博、腾讯微博和foursquare支持此字段

在share方法中,我们在ShareSDK的PlatformActionListener监听中将分享结果通知CP,以下是分享的回调说明。

回调信息 code msg
分享成功 SHARERESULT_SUCCESS null或者错误信息的简单描述
分享取消 SHARERESULT_CANCEL null或者错误信息的简单描述
分享失败 SHARERESULT_FAIL null或者错误信息的简单描述
分享网络出现错误 SHARERESULT_NETWORK_ERROR null或者错误信息的简单描述

设置调试模式

public void setDebugMode(boolean paramBoolean);
已废弃,实现方式参照模板。

获取SDK版本号

public String getSDKVersion();
SDK版本是指第三方SDK的版本号,格式可能都不一样,如6.0、1.0.3、2.1.0.4等,这个版本号格式不需要任何改动。

获取插件版本号

public String getPluginVersion();
格式『版本序号_SDK版本号』,版本序号从『2.0.0』开始,每次更新+0.0.1