项目踩坑之Share SDK指定平台分享

          现在很多应用都包含了社会化分享的功能,最近由于项目需要,所以亲自去踩了踩Mob社会化分享的坑。接下来就介绍一下怎样集成Share SDK吧!!!
          一、集成ShareSDK的步骤:
          1)注册ShareSDK应用,获取ShareSDK的appkey
               首先进入 Mob官网,注册一个账户,然后申请应用得到appkey来使用ShareSDK。

               创建好了之后,可以点击下图进入应用概况,就可以看到所申请的AppKey:

               具体的注册和申请应用的步骤可以参照 官网上的帖子
          2)下载ShareSDK
          创建完应用之后,就可以下载ShareSDK,官网上一目了然。

          进入ShareSDK for Android页面进行选择SDK的版本,根据个人需要选择即可。

               点击SDK下载,就可以进入到选择界面,选择自己所需要的平台,然后点击下载SDK 。

               下载完成,解压之后会看见有两个文件夹,如下所示:

          3)利用快速集成工具生成所需要的集成文件
               点击进入ShareSDK  for  Android目录下,如图所示,QuickIntegrater.jar就是一个快速集成工具;

               双击打开快速集成工具,显示如下所示界面:

               这个界面可以看到需要输入项目名称和包名,然后选择自己需要分享的平台,点击确定就可以了。(因为我的项目中只用得到QQ 和微信,所以在下载 SDK的时候只选择了这两个平台,如果你是选择了多个平台的话,上面图中会显示更多的内容。)确定以后,集成工具会帮我们生成一个你所输入的项目名称的文件夹;

               处于多方面原因,还是用“Sample”这个名称吧,在实际操作中,最好和你的项目名称一样,这样不容易忘记。打开这个文件之后,可以看见下面所示的文件夹:

               其中,libs是jar包列表,res是所需的资源文件,src是onekeyshare界面代码,assets是配置初始化第三方那个key的文件。
          4)将生成的文件集成到项目中
               首先,我们将“Sample”下的libs文件夹中的jar包全部复制到我们项目中的app下的libs中;

               复制进去之后,还需要选择jar包右键选择add as library。由于,我已经操作了,所以就不上图了。执行完“add  as  library”,之后就会像上图一样,jar前面都多了个三角符号。否则,是没有这个符号的。
               其次,将“Sample”下的assets复制到src->main下:

               接下来,是将“Sample”下的res文件夹中的全部内容复制到自己项目中的src->main->res下,不需要修改文件夹的名称。和原来的文件夹进行资源的合并。  
 
               最后,将“Sample”下的src中的内容复制到自己项目中的src->main->java下,即可。

          5)配置清单文件
          以上几个步骤,就已经完成了ShareSDK的集成了,下面我们还要在AndroidManifest.xml文件中进行相关的配置:
               1>添加权限:
 <uses-permission android:name="android.permission.GET_TASKS" />
 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
 <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
 <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
 <!-- 蓝牙分享所需的权限 -->
 <uses-permission android:name="android.permission.BLUETOOTH" />
 <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
               2>添加ShareSDK必要的activity的配置:(我这里只添加了自己项目中所需要的activity,如果你还有其他平台,请到官方文档自行查询并添加)
<activity
    android:name="com.mob.tools.MobUIShell"
    android:theme="@android:style/Theme.Translucent.NoTitleBar"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="stateHidden|adjustResize" >
    <!-- QQ和QQ空间分享 QQ登录的回调必须要配置的 -->
    <intent-filter>
        <data android:scheme="tencent100371282" />
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.BROWSABLE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

    <!-- 新浪微博客户端分享回调必须配置 -->
    <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=".wxapi.WXEntryActivity"
    android:theme="@android:style/Theme.Translucent.NoTitleBar"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:exported="true"
    android:screenOrientation="portrait" >
</activity>
          6)申请配置第三方平台的key
          接下来我们需要找到src->main->assets下的ShareSDK.xml文件,将其打开;

               这里打开后我们可以看到ShareSDK的appkey,前面注册的时候我们已经介绍过,注册完的appkey替换这里默认的appkey(必要)
其次就是第三方的appid或者appkey等了,这些第三方的key需要开发者去对应的第三方平台去申请。首先是替换ShareSDK的appKey。然后是替换你所需要的分享平台的APPID/APPKey/APPSecret就可以了。是不是很简单呢?
          7)初始化ShareSDK
          使用ShareSDK必须要进行初始化,代码如下:
ShareSDK.initSDK(Context,"你所申请的sharesdk的appkey");
          初始化第一个参数传当前activity的context对象,第二个参数传ShareSDK的appkey,第二个参数可以省略不传,因为sharesdk.xml已经配置,默认会访问的;
          初始化的代码尽量放到调用分享的activity的入口oncreat下就好,尽量不要再application里初始化,也可以多次调用初始化ShareSDK,初始化ShareSDK必须放到所有调用ShareSDK的最前端。
          8)调用onekeyshare的界面分享
          接下来我们配置onekeyshare的代码,如下所示:
private void showShare(String title,String content,String address,String image,String logo) {
    ShareSDK.initSDK(mContext);
    OnekeyShare oks = new OnekeyShare();
    //关闭sso授权
    oks.disableSSOWhenAuthorize();

    // title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间等使用
    oks.setTitle(title);
    // titleUrl是标题的网络链接,QQ和QQ空间等使用
    oks.setTitleUrl(address);
    // text是分享文本,所有平台都需要这个字段
    oks.setText(content);
    // url仅在微信(包括好友和朋友圈)中使用
    oks.setUrl(address);
    oks.setSiteUrl(address);
    oks.setImageUrl(logo);
    // 启动分享GUI
    oks.show(mContext);
}
          这是我自己精简了的方法,和官方上的有不同的地方,但是已经可以能满足我的项目中的需求了。界面如下:

          到此为止,我们已经可以实现一键分享的功能了。但是偏偏没那么简单就结束,因为,在我的项目中,还有一个需求就是:

          指定平台进行分享,你总不可能,点一个图标还弹出一个popuwindow来吧。所以只能继续踩坑了啊。按照官方文档,和不断的踩踩踩之后,三个平台的分享方法简单如下面所示:
          指定QQ分享:
private void qqShare(String title,String content,String address,String image,String logo) {
    ShareSDK.initSDK(mContext);
    Platform.ShareParams sp = new Platform.ShareParams();
    sp.setTitle(title);
    sp.setTitleUrl(address); // 标题的超链接
    sp.setText(content);
    sp.setImageUrl(logo);
    sp.setSite("随便写");
    sp.setSiteUrl(address);
    Platform qzone = ShareSDK.getPlatform(QQ.NAME);
    // 设置分享事件回调(注:回调放在不能保证在主线程调用,不可以在里面直接处理UI操作)
    qzone.setPlatformActionListener((PlatformActionListener) mContext);
    // 执行图文分享
    qzone.share(sp);
}
          指定微信分享:
private void wxShare(String title,String content,String address,String image,String logo) {
    ShareSDK.initSDK(mContext);
    Platform.ShareParams wechat = new Platform.ShareParams();
    wechat.setTitle(title);
    wechat.setText(content);
    wechat.setImageUrl(logo);
    wechat.setUrl(address);
    wechat.setShareType(Platform.SHARE_WEBPAGE);

    Platform weixin = ShareSDK.getPlatform(mContext, Wechat.NAME);
    weixin.setPlatformActionListener((PlatformActionListener) mContext);
    weixin.share(wechat);
}
          指定朋友圈分享:
private void friendShare(String title,String content,String address,String image,String logo) {
        ShareSDK.initSDK(mContext);
        Platform.ShareParams wechatMoments = new Platform.ShareParams();
        wechatMoments.setTitle(title);
        wechatMoments.setText(content);
        wechatMoments.setUrl(address);
        wechatMoments.setImageUrl(logo);
        wechatMoments.setShareType(Platform.SHARE_WEBPAGE);
        Platform weixin = ShareSDK.getPlatform(mContext, WechatMoments.NAME);
        weixin.setPlatformActionListener((PlatformActionListener) mContext);
        weixin.share(wechatMoments);
        Toast.makeText(mContext, "朋友圈分享", Toast.LENGTH_SHORT).show();
    }
          我这里只是做简单的分享,如果你每个平台分享的类型不一样,可参考Mob官网的 Android 不同平台分享内容的详细说明

          好了,今天的坑就踩到这里吧!欢迎大家一起来交流!!!!

1 2 3 4 5 $sharesdk.shareContent($sharesdk.platformID.SinaWeibo, params, function (platform, state, shareInfo, error) { alert("state = " + state + "\nshareInfo = " + shareInfo + "\nerror = " + error); }); 一键分享 1 2 3 4 5 $sharesdk.oneKeyShareContent([$sharesdk.platformID.SinaWeibo, $sharesdk.platformID.TencentWeibo], params, function (platform, state, shareInfo, error) { alert("state = " + state + "\nshareInfo = " + shareInfo + "\nerror = " + error); }); 关于具体的分享参数名称,请参考“不同平台分享内容的详细说明”章节的说明。 用户授权 调用ShareSDK中的authorize方法可进行用户授权。代码如下: 1 2 3 4 5 $sharesdk.authorize($sharesdk.platformID.SinaWeibo, function (platform, state, error){ alert("state = " + state + "\nerror = " + error); }); 获取用户资料 调用ShareSDK中的getUserInfo来获取授权用户的信息。代码如下: 1 2 3 4 5 $sharesdk.getUserInfo($sharesdk.platformID.SinaWeibo, function (platform, state, user, error) { alert("state = " + state + "\nuser = " + user + "\nerror = " + error); }); iOS部分集成步骤(不发布iOS版本可略过此部分) 导入JS桥接的iOS版本组件 打开下载的JS包里的iOS/ShareSDKForJS/ShareSDKForJS.xcodeproj项目工程,选择ShareSDKForJS静态库运行Xcode,如图: 700px-js_doc_001.png 运行成功之后,请大家打开文件找到Build文件夹,然后进入文件中找到build/Products/Debug-iphonesimulato /libShareSDKForJS.a文件以及找到build/Products/Debug-iphonesimulator/usr/local /include/ShareSDKJSBridge.h这个文件,再将libShareSDKForJS.a和ShareSDKJSBridge.h这 2个文件导入到你的项目里,如图 700px-js_doc_002.png 注意:(如果在分享中弹不出分享的菜单,如果大家的ShareSDK.js文件是本地的,要把这个加到Build Phases里面的Copy Bundle Resources选项) 下载iOS版本ShareSDK,并导入到工程中。 登录ShareSDK的官方网站下载并解压最新版本的SDK。如果您还尚未下载,请 点击这里下载 或者访问 http://sharesdk.cn/Download 。解压后如图所示: 700px-js_doc_003 将ShareSDK导入工程中,并添加相应的依赖库。此步骤可以参考:《iOS快速集成指南》中的第一、第二步。执行完成后,如下图所示: 700px-js_doc_004.png 为UIWebView添加消息捕获 先导入ShareSDKJSBridge.h头文件。 1 #import "ShareSDKJSBridge.h" 然后给UIWebView设置一个委托对象,如: 1 webView.delegate = self; 注意:webView是UIWebView的对象实例。 最后实现shouldStartLoadWithRequest委托方法,并在方法中加入JSBridge的captureRequest方法,代码如下: 1 2 3 4 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { return ![[ShareSDKJSBridge sharedBridge] captureRequest:request webView:webView]; } 添加完毕后就可以对工程进行运行测试。 Android部分集成步骤(不发布Android版本可略过此部分) 导入的步骤如下: 1、参考”安卓快速集成文档“章节的说明,导入ShareSDK for Android的jar库和图片、文字资源。 2、复制github上的jsdemo项目中”cn.sharesdk.js”包中的源代码复制到你的项目中。QQ截图20150304142013 3、在您WebView加载页面地址之前。调用ShareSDKUtils.prepare(webview, webviewClient); 请注意,ShareSDKUtils.prepare方法要在WebView.setWebViewClient(WebViewClinet);之后调用,而且此后不能再调用setWebViewClient方法,否则ShareSDK的初始化操作可能失败。 下面的代码来自github上的demo: Objective-C 1 2 3 4 5 6 7 8 9 10 11 12 public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); WebView wvBody = new WebView(this); WebViewClient wvClient = new WebViewClient(); wvBody.setWebViewClient(wvClient); wvBody.setWebChromeClient(new WebChromeClient() { public boolean onJsAlert(WebView view, String url, String message, JsResult result) { return super.onJsAlert(view, url, message, result); } });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员丶星霖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值