ShareSDKPlus APICloud 模块

前言

ShareSDKPlus封装了ShareSDK,是对APICloud平台的支持,为APICloud开发的App提供社交分享功能的一个组件,支持包括QQ、微信、新浪微博等多家主流社交平台,帮助开发者轻松实现社会化分享、第三方登录、关注、获得用户资料、获取好友列表等主流的功能。 当前ShareSDK版本,iOS:v4.2.5、Android:v3.5.2

集成准备

注册Mob应用
开发者使用本模块之前需要先到 Mob官网申请开发者账号,并在账号内填写相应信息创建自己的 APP,从而获取AppKey和AppSecret。 详情参考: 获取AppKey和AppSecret

创建APICloud应用
APICloud提供了两种创建应用的方式,方便开发者在云端或APICloud Studio中创建应用。

云端创建应用
注册并登录APICloud系统:https://www.apicloud.com/console 点击左上⻆“创建应用”, 如图:选择“Native”,填写“名称”及“说明”,应用创建完成。

ShareSDKPlus APICloud 模块_第1张图片

APICloud Studio中创建应用:
下载并安装开发工具:APICloud Studio 2 登录APICloud Studio,没有账号点击“注册账号”,已经注册,用之前注册的APICloud账号登录APICloud Studio

ShareSDKPlus APICloud 模块_第2张图片

这两端可以相互同步信息:

同步本地应用到云端资源库,开发者在APICloud Studio创建的应用会和云端资源库建立连接。项目代码改动后,可以使用APICloud Studio的代码提交功能提交代码到云端资源库。

打开APICloud云端,加入我们的ShareSDK模块和comlib模块
ShareSDKPlus APICloud 模块_第3张图片

模块配置
使用此模块之前建议先配置 config.xml 文件,配置完毕,需通过云端编译生效,配置方法如下:

iOS配置
配置config.xml文件
下面是配置各个平台URL Scheme例子,开发者自行删减。下面的值都是ShareSDK Demo测试使用,开发者可自行根据自己的AppKey修改配置



        

        

        
        

        

        

        

        

        

        

        

        

        

        

        

        

        

字段描述:

URL Scheme:用于实现应用间跳转及数据交换,跳转到第三方应用客户端进行分享或授权后,从第三方应用客户端平台跳回到当前应用。URL Scheme的value值根据第三方平台规则设置。可以配置多个URL Scheme。

各个平台配置规范:
微信:微信开放平台获取的AppId,URL Scheme为wx+AppId 如: wx617c77c82218ea2c

QQ:需要配置两个URL Scheme,一个是tencent + AppId; 一个是 QQ + AppId转换成的十六进制(如果AppId转换的16进制数不够8位则在前面补0,如转换的是:5FB8B52,则最终填入为QQ05FB8B52 注意:转换后的字母要大写),这里的字母一定要是大写

新浪微博:新浪微博开放平台获取到的appkey,URL Scheme为wb+Appkey 如:wb568898243

Facebook:URL Scheme为fb+AppId如:fb1412473428822331

配置 key.xml 文件
需要将第三方平台(微博、QQ、微信、Twitter、Facebook等)申请的AppKey、AppSecret、redirecturi等参数配置到 key.xml 文件中。

key.xml 配置详解

key.xml 文件需要放在 widget://res 文件目录下,格式如下:



    
    
    

    
    

    
    
    

    
    

    
    
    

    
    
    

    
    
    

    
    
    

    

    

    

    

    
    
    

    
    
    

    
    
    

    
    
    

    
    
    

    
    
    

    
    
    
    

    
    
    

    
    
    

    
    
    

    
    

    
    
    

    
    
    

    

    
    

    
    
    

    
    
    

    
    

    
    
    

    

    
    
    

    
    

    
    

    
    
    

以上可能出现的全部各个平台的配置,根据开发者需要删减,另外部分特殊平台需要在info.plist文件中配置

字段描述:

shareSDKPlus_SinaWei_AppKey: 从新浪微博开放平台获取的AppKey.

shareSDKPlus_SinaWei_AppSecret: 从新浪微博开放平台获取的AppSecret.

shareSDKPlus_SinaWei_RedirectUri: 从新浪微博开放平台创建应用时自定义填写的回调地址url

其他平台也都是各自到开放平台注册应用获取

配置info.plist文件
该文件含MOB平台MOBAppKey和MOBAppSecret、特殊平台AppKey配置、白名单配置,将info.plist放在widget://res文件目录下,文件内容:






    MOBAppKey
    moba6b6c6d6
    MOBAppSecret
    b89d2427a3bc7ad1aea1e1e8c1d36bf3

    AccountKitClientToken
    c30c08723aa8c48fbd5e01d1c3103891
    FacebookAppID
    1412473428822331
    KAKAO_APP_KEY
    9c17eb03317e0e627ec95a400f5785fb
    LineSDKConfig
    
        ChannelID
        1521201864
    

    LSApplicationQueriesSchemes
    
        kakaotalk-5.9.7
        pinterestsdk.v1
        vkauthorize
        storylink
        kakaolink
        storykompassauth
        kakaokompassauth
        yixinfav
        yixinoauth
        yixinopenapi
        yixin
        pocket-oauth-v1
        dingtalk-open
        dingtalk
        alipayshare
        alipay
        whatsapp
        tim
        timapi
        timopensdkfriend
        timwpa
        timgamebindinggroup
        timapiwallet
        timOpensdkSSoLogin
        wtlogintim
        timopensdkgrouptribeshare
        timopensdkapiV4
        timgamebindinggroup
        timopensdkdataline
        wtlogintimV1
        timapiV1
        yixinoauth
        yixin
        sinaweibohd
        sinaweibo
        weibosdk2.5
        weibosdk
        weibo
        sinaweibosso
        weixin
        youtube
        mpsharesdk11
        mpsharesdk10
        mtmv
        mqqopensdkapiV4
        mqzone
        mqqwpa
        wtloginmqq2
        mqzoneopensdkapiV2
        mqzoneopensdkapi19
        mqzoneopensdkapi
        mqzoneopensdk
        mqqopensdkapiV3
        mqqopensdkapiV2
        mqq
        mqqOpensdkSSoLogin
        mqqapi
        lineauth
        line
        instagram
        fbauth
        fb-messenger-platform-20150714
        fb-messenger
        fbauth2
        fbapi
        fbapi20130214
        twitterauth
        tg
        telegram
        renrenapi
        renrenios
        renreniphone
        douyinsharesdk
        douyinopensdk
    

    NSPhotoLibraryAddUsageDescription
    写入相册视频
    NSPhotoLibraryUsageDescription
    从手机相册中选择

    NSAppTransportSecurity
    
        NSAllowsArbitraryLoads
        
    

MOBAppKey、MOBAppSecret:(必须配置)从MOB平台创建应用后,申请的AppKey和AppSecret.

KAKAO_APP_KEY: 从kaKao平台申请的 AppKey,若iOS平台需要使用kaKaoTalk、kaKaoStory平台进行分享,必须添加此字段

LineSDKConfig: line平台配置

LSApplicationQueriesSchemes: 白名单配置,用于判断是否安装第三方客户端及跳转到第三方客户端, 注意用到哪个就配置哪个,无用的可以不配置

注意:

配置白名单,也可以在配置config.xml文件中,配置方法参考配置可被检测的URL Scheme。配置内容参考 快速集成 配置ATS(App Transport Security),在info.plist文件中,APP可以使用http协议访问。配置方法参考iOS修改Info.plist之配置ATS.

配置UZApp.entitlements文件
将UZApp.entitlements放在widget://res文件目录下,并配置universal Link,文件内容如下:





    com.apple.developer.applesignin
        
            Default
        
    com.apple.developer.associated-domains
    
        applinks:ybpre.share2dlink.com
    

Android配置
注意:ShareSDK的ApiCloud插件1.3.1及之后的版本,做了分包处理,集成方式如下: (老版本集成文档)

平台配置
Android配置第三方平台的AppKey和Mob-AppKey/Mob-AppSecret等信息遵循APICloud的惯例是在config.xml中配置。 在name为”ShareSDKPlus”的标签内,配置标签来填充AppKey等属性的值。 下面是配置各个平台AppKey/AppSecret/RedirectUrl的例子,实际的使用中需要开发者填写自己在第三方网站申请的值(只需要改变值,不要改变AppKey/AppSecret/RedirectUrl的名称,否则将会读取不到)


     
     

     
     
     
     

     
     
     
     

     
     
     
     

     
     
     

     
     
     
     

     
     
     
     
     

     
     
     
     

     

     

     
     

     
     
     

     
     
     

  

Android端支持平台
注意:shareSDKPlus模块在ApiCloud的模块库中添加,shareSDKPlus需要使用的其他第三方平台在gitHub上下载
ShareSDKPlus APICloud 模块_第4张图片

API接口
ShareSDKPlus APICloud 模块_第5张图片

注意:

  • 使用QQ空间时,QQ模块也必须引入,即ShareSDKPlusQZone和ShareSDKPlusQQ模块都需要引入。
  • 使用QQ模块时,需要修改ShareSDKPlusQQ.zip内容。

步骤为:

  • 解压ShareSDKPlusQQ.zip
  • 修改解压出的ShareSDKPlusQQ/res文件夹下的AndroidManifest.xml文件中${QQ-AppKey}内容,把${QQ-AppKey}替换为自己应用的QQAPPkey

修改后的内容为:其中1234567则为自己QQ的appkey



    

        
            
                

                
                

                
            
        
    
  • 修改完成,压缩ShareSDKPlusQQ文件夹,压缩方式选择标准。

模块接口

首先添加一个ShareSDK.js,放在widget://script文件目录下,内容如下:

/**
 * 常量:分享类型,分享/授权平台,分享/授权结果状态
 */
function ShareSDK()
{
    /**
     * JSON字符串转换为对象
     * @param string        JSON字符串
     * @returns {Object}    转换后对象
     */

    JsonStringToObject = function (string)
    {
        try
        {
            return eval("(" + string + ")");
        }
        catch (err)
        {
            return null;
        }
    };

    this.JsonStringToObject = function (string)
    {
        return JsonStringToObject(string);
    }

    /**
     * 对象转JSON字符串
     * @param obj           对象
     * @returns {string}    JSON字符串
     */
    ObjectToJsonString = function (obj)
    {
        var S = [];
        var J = null;

        var type = Object.prototype.toString.apply(obj);

        if (type === '[object Array]')
        {
            for (var i = 0; i < obj.length; i++)
            {
                S.push(ObjectToJsonString(obj[i]));
            }
            J = '[' + S.join(',') + ']';
        }
        else if (type === '[object Date]')
        {
            J = "new Date(" + obj.getTime() + ")";
        }
        else if (type === '[object RegExp]'
            || type === '[object Function]')
        {
            J = obj.toString();
        }
        else if (type === '[object Object]')
        {
            for (var key in obj)
            {
                var value = ObjectToJsonString(obj[key]);
                if (value != null)
                {
                    S.push('"' + key + '":' + value);
                }
            }
            J = '{' + S.join(',') + '}';
        }
        else if (type === '[object String]')
        {
            J = '"' + obj.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '') + '"';
        }
        else if (type === '[object Number]')
        {
            J = obj;
        }
        else if (type === '[object Boolean]')
        {
            J = obj;
        }

        return J;
    };

    this.ObjectToJsonString = function (obj)
    {
        return ObjectToJsonString(obj);
    }

    /**
     * 平台类型
     * @type {object}
     */
    this.PlatformID = {
        Unknown : 0,
        SinaWeibo : 1,            //Sina Weibo   
        TencentWeibo : 2,        //Tencent Weibo  
        DouBan : 5,                //Dou Ban   
        QZone : 6,                 //QZone   
        Renren : 7,                //Ren Ren   
        Kaixin : 8,                //Kai Xin  
        Pengyou : 9,            //Friends  
        Facebook : 10,            //Facebook   
        Twitter : 11,            //Twitter   
        Evernote : 12,            //Evernote  
        Foursquare : 13,        //Foursquare  
        GooglePlus : 14,        //Google+   
        Instagram : 15,            //Instagram  
        LinkedIn : 16,            //LinkedIn   
        Tumblr : 17,            //Tumblr   
        Mail : 18,                 //Mail  
        SMS : 19,                //SMS   
        Print : 20,             //Print   
        Copy : 21,                //Copy   
        WeChat : 22,            //WeChat Friends  
        WeChatMoments : 23,        //WeChat Timeline   
        QQ : 24,                //QQ  
        Instapaper : 25,        //Instapaper   
        Pocket : 26,            //Pocket   
        YouDaoNote : 27,         //You Dao Note
        Pinterest : 30,         //Pinterest  
        Flickr : 34,            //Flickr  
        Dropbox : 35,            //Dropbox  
        VKontakte : 36,            //VKontakte   
        WeChatFavorites : 37,    //WeChat Favorited  
        YiXinSession : 38,         //YiXin Session   
        YiXinTimeline : 39,        //YiXin Timeline   
        YiXinFav : 40,            //YiXin Favorited  
        MingDao : 41,              //明道
        Line : 42,                 //Line
        WhatsApp : 43,             //Whats App
        KakaoTalk : 44,         //KakaoTalk
        KakaoStory : 45,        //KakaoStory 
        FacebookMessenger : 46, //FacebookMessenger
        Bluetooth : 48,         //Bluetooth
        Alipay : 50,            //Alipay
        AliPaySocialTimeline:51,//AliPaySocial Timeline
        DingTalk:52,            //DingTalk
        YouTube:53,             //youtube
        MeiPai:54,              //美拍
        Cmcc : 55,              //中国移动
        Reddit : 56,            //Reddit
        ESurfing : 57,          //天翼
        Douyin : 58,            //抖音
        FacebookAccount : 58,   //FacebookAccount
        KakaoPlatform : 995,    //Kakao Series
        EvernotePlatform : 996, //Evernote Series
        WechatPlatform : 997,   //Wechat Series
        QQPlatform : 998,        //QQ Series
        Any : 999                 //Any Platform  
    };

    /**
     * 回复状态
     * @type {object}
     */
    this.ResponseState = {
        Begin : 0,              //开始
        Success: 1,             //成功
        Fail : 2,               //失败
        Cancel : 3             //取消
    };

    /**
     * 内容分享类型
     * @type {object}
     */
    this.ContentType = {
        Auto : 0,
        Text : 1,
        Image : 2,
        WebPage : 4,
        Music : 5,
        Video : 6,
        App : 7,
        File : 8,
        Emoji : 9
    };

};

var $sharesdk = new ShareSDK();

添加ShareSDK.js目的主要是提供平台号,回调状态等一些常量

引入模块

var shareApi = api.require('shareSDKPlus');

authorize(授权)

authorize({params}, callback(ret, err))

params

platform: 类型:数字 描述:授权平台号,是新浪微博授权还是微信授权或者其他平台授权,由此参数决定

callback(ret, err)

ret: 类型:JSON 对象 内部字段:

{
    state: 1      //数字类型,1:成功 2:失败 3:取消
    data:{}        //json对象 授权后获取的用户信息
    error:{      // state = 2时
        error_code:,     //错误码
        error_msg:   //错误信息
    }
}

示例代码

var shareApi = api.require('ShareSDKPlus');
shareApi.authorize({
    "platform": $sharesdk.PlatformID.SinaWeibo
},function(ret, err){
    var state = ret.state;
    switch(state)
    {
        case $sharesdk.ResponseState.Success://1
            api.toast({
                msg: "授权成功",
                location: 'middle'
            });
        break;
        case $sharesdk.ResponseState.Fail://2
            api.toast({
                msg: "授权失败",
                location: 'middle'
            });
        break;
        case $sharesdk.ResponseState.Cancel://3
            api.toast({
                msg: "取消授权",
                location: 'middle'
        });
        break;
       default:
    }   
});

可用性 iOS系统,Android系统 可提供的1.0.0及更高版本

cancelAuthorize(取消授权)

cancelAuthorize({params}, callback(ret, err))

params

platform: 类型:数字 描述:授权平台号

callback(ret, err)

ret: 类型:JSON 对象 内部字段:

{
    state: 1      //数字类型,1:成功 2:失败 3:取消
    error:{      // state = 2时
        error_code:,     //错误码
        error_msg:   //错误信息
    }
}

示例代码

var shareApi = api.require('ShareSDKPlus');
shareApi.cancelAuthorize({
    "platform": $sharesdk.PlatformID.SinaWeibo
},function(ret, err){
    var state = ret.state;
    switch(state)
    {
        case $sharesdk.ResponseState.Success://1
            api.toast({
                msg: "成功",
                location: 'middle'
            });
        break;
        case $sharesdk.ResponseState.Fail://2
            api.toast({
                msg: "失败",
                location: 'middle'
            });
        break;
        case $sharesdk.ResponseState.Cancel://3
            api.toast({
                msg: "授权",
                location: 'middle'
        });
        break;
       default:
    }   
});

可用性
iOS系统,Android系统 可提供的1.0.0及更高版本

getUserInfo(获取用户信息)

getUserInfo({params}, callback(ret, err))

params

platform: 类型:数字 描述:平台号,是获取新浪微博还是微信或者其他平台用户信息,由此参数决定

callback(ret, err)

ret: 类型:JSON 对象 内部字段:

{
    state: 1      //数字类型,1:成功 2:失败 3:取消
    data:{}        //json对象 获取的用户信息
    error:{      // state = 2时
        error_code:,     //错误码
        error_msg:   //错误信息
    }
}

示例代码

var shareApi = api.require('ShareSDKPlus');
shareApi.getUserInfo({
    "platform": $sharesdk.PlatformID.SinaWeibo
},function(ret, err){
    var state = ret.state;
    switch(state)
    {
        case $sharesdk.ResponseState.Success://1
            api.toast({
                msg: "成功",
                location: 'middle'
            });
        break;
        case $sharesdk.ResponseState.Fail://2
            api.toast({
                msg: "失败",
                location: 'middle'
            });
        break;
        case $sharesdk.ResponseState.Cancel://3
            api.toast({
                msg: "取消",
                location: 'middle'
        });
        break;
       default:
    }   
});

shareContent(直接分享)

shareContent({params}, callback(ret, err))

params

platform: 类型:数字 描述:平台号,分享到指定平台

shareParams

类型:json 描述:分享内容 text:文本 imageUrl:图片地址 title:标题

callback(ret, err)

ret: 类型:JSON 对象 内部字段:

{
    state: 1      //数字类型,1:成功 2:失败 3:取消
    data:{}        //
    error:{      // state = 2时
        error_code:,     //错误码
        error_msg:   //错误信息
    }
}

示例代码

var shareApi = api.require('ShareSDKPlus');

var shareParams =
    {
        "text" : "测试的文字",
        "imageUrl" : "https://download.sdk.mob.com/206/4f8/dfc9ea27dd8bc4abfec865c38d/800_450_156.2.jpg",
        "title" : "测试的标题",
        "titleUrl" : "http://www.mob.com",
        "description" : "测试的描述",
        "site" : "ShareSDK",
        "siteUrl" : "http://www.mob.com",
    };

shareApi.shareContent({
    "platform": $sharesdk.PlatformID.SinaWeibo,
    "shareParams": shareParams
    "shareType" : $sharesdk.ContentType.Auto
},function(ret, err){
    var state = ret.state;
    switch(state)
    {
        case $sharesdk.ResponseState.Success://1
            api.toast({
                msg: "分享成功",
                location: 'middle'
            });
        break;
        case $sharesdk.ResponseState.Fail://2
            api.toast({
                msg: "分享失败",
                location: 'middle'
            });
        break;
        case $sharesdk.ResponseState.Cancel://3
            api.toast({
                msg: "取消分享",
                location: 'middle'
        });
        break;
       default:
    }   
});

可用性

iOS系统,Android系统 可提供的1.0.0及更高版本

oneKeyShareContent(一键分享/菜单分享)

oneKeyShareContent({params}, callback(ret, err))

params

platforms:

platform: 类型:数组 描述:可分享的平台列表,为null为全平台

shareParams:

类型:json 描述:分享内容 text:文本 imageUrl:图片地址 title:标题

callback(ret, err)

ret: 类型:JSON 对象 内部字段:

{
    state: 1      //数字类型,1:成功 2:失败 3:取消
    data:{}        //
    error:{      // state = 2时
        error_code:,     //错误码
        error_msg:   //错误信息
    }
}

示例代码

var shareApi = api.require('ShareSDKPlus');

var shareParams =
    {
        "text" : "测试的文字",
        "imageUrl" : "https://download.sdk.mob.com/206/4f8/dfc9ea27dd8bc4abfec865c38d/800_450_156.2.jpg",
        "title" : "测试的标题",
        "titleUrl" : "http://www.mob.com",
        "description" : "测试的描述",
        "site" : "ShareSDK",
        "siteUrl" : "http://www.mob.com",
    };

var platforms =
    [
        $sharesdk.PlatformID.SinaWeibo,
        $sharesdk.PlatformID.WeChat
    ];

shareApi.oneKeyShareContent({
    "platforms": platforms, //为null时,显示全部可分享的平台(排除当前环境不可分享平台)
    "shareParams": shareParams
},function(ret, err){
    var state = ret.state;
    switch(state)
    {
        case $sharesdk.ResponseState.Success://1
            api.toast({
                msg: "分享成功",
                location: 'middle'
            });
        break;
        case $sharesdk.ResponseState.Fail://2
            api.toast({
                msg: "分享失败",
                location: 'middle'
            });
        break;
        case $sharesdk.ResponseState.Cancel://3
            api.toast({
                msg: "取消分享",
                location: 'middle'
        });
        break;
       default:
    }   
});

可用性 iOS系统,Android系统 可提供的1.0.0及更高版本

如何扩充平台
当前ShareSDKPlus只支持微信、QQ、新浪微博、钉钉、支付宝、facebook、twitter、Instagram、line、WhatsApp等十个平台,如果想要支持其他平台应如何操作

iOS方案
点击此处

Android方案
点击此处

APICloud例子demo
点击此处

你可能感兴趣的:(ShareSDKPlus APICloud 模块)