Android调用sharesdk过程及问题

具体配置方法详见官网,我这边使用的离线配置,即没有使用gradle进行配置,这里偷偷懒,不详细记录

详细步骤

步骤为粗略步骤,详细步骤参照此处
1. 在官网根据自己要分享的平台下载相关的jar包
2. 将下载的jar包放在自己目录的lib文件夹下并在项目中引用
3. 使用它提供的指导文件生成相关文件,并根据readme将各个文件放在各自对应的路径下
4. 在manifests文件下申请相关权限

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<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" />
  1. 在application标签中添加以下内容
<activity
     android:name="com.mob.tools.MobUIShell"
     android:theme="@android:style/Theme.Translucent.NoTitleBar"
     android:configChanges="keyboardHidden|orientation|screenSize"
     android:windowSoftInputMode="stateHidden|adjustResize" >

    <!-- 调用新浪原生SDK,需要注册的回调activity -->
    <intent-filter>
        <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

    <!--集成line客户端登录授权,需要添如下格式的过滤器-->
    <intent-filter> 
    <data android:scheme="line.1477692153" />
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.BROWSABLE" />
    <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>

<!-- ShareSDK<strong>3.1.0版本之前</strong>才需要在MobUIShell下面注册此意图,3.1.0版本之后(包含3.1.0)不需要注册此intent-->
 <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> 
</activity>
<!-- 填写您从Mob开发者后台中得到的Appkey和AppSecret -->
<meta-data android:name="Mob-AppKey" android:value="您的AppKey"/>
<meta-data android:name="Mob-AppSecret" android:value="您的AppSecret"/>

其中Mob-AppKey与Mob-AppSecret是自己申请时后台分配的,根据后台数据如实替换即可
6. 在assets文件夹的ShareSDK.xml文件下,填写每个平台需要的参数,例如

 <Wechat
        Id="4"
        SortId="4"
        AppId="xxx"
        AppSecret="xxx"
    userName="xxx"
    path="pages/index/index.html?id=1"
        BypassApproval="true"
        Enable="true" />

每个字段的意思详见上面链接的官网教程
7. 启动分享
在需要弹出分享页面进行分享的页面,添加以下方法

private void showShare() {
     OnekeyShare oks = new OnekeyShare();
     //关闭sso授权
     oks.disableSSOWhenAuthorize(); 

    // 分享时Notification的图标和文字  2.5.9以后的版本不     调用此方法
     //oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));
     // title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用
     oks.setTitle(getString(R.string.share));
     // titleUrl是标题的网络链接,仅在人人网和QQ空间使用
     oks.setTitleUrl("http://sharesdk.cn");
     // text是分享文本,所有平台都需要这个字段
     oks.setText("我是分享文本");
     // imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
     oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片
     // url仅在微信(包括好友和朋友圈)中使用
     oks.setUrl("http://sharesdk.cn");
     // comment是我对这条分享的评论,仅在人人网和QQ空间使用
     oks.setComment("我是测试评论文本");
     // site是分享此内容的网站名称,仅在QQ空间使用
     oks.setSite(getString(R.string.app_name));
     // siteUrl是分享此内容的网站地址,仅在QQ空间使用
     oks.setSiteUrl("http://sharesdk.cn");

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

分享朋友圈时,可以分享网络图片或本机图片,本机图片需要设置 oks.setImagePath(“/sdcard/test.jpg”),网络图片需要设置 oks.setImageUrl(url);//url即为网络图片链接。

  1. 分享回调
    有时候我们要做活动,分享成功后赠送优惠券,这时候我们可以设置相关回调
oks.setCallback(new PlatformActionListener() {
            @Override
            public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {

            }

            @Override
            public void onError(Platform platform, int i, Throwable throwable) {

            }

            @Override
            public void onCancel(Platform platform, int i) {

            }
        });

可以看到,这里面定义了三个方法
+ onComplete,分享成功的回调,可以在这里调用接口,赠送优惠券等
+ onError,分享发生错误的回调
+ onCancel,分享取消的回调
我们一般关注第一个onComplete就行

至此,完整的分享过程已经全部结束,可以欢快的进行相关平台的分享了

分享问题与解决

  1. 分享完成后选择留在微信,分享回调失效
    此问题暂时无解……真的- -官方论坛也说没有解决办法……
    所以取巧的解决办法是,在用户调用分享的时候就调用接口发放优惠券,缺点是可能会造成假分享

  2. 在安卓6.0以上的系统分享界面打不开

本来以为是部分手机问题,借了很多手机发现都有这个问题,于是想到了动态权限问题,可是不知道是什么权限,直到在文档里发现了这段话

微信并无实际的分享网络图片和分享bitmap的功能,如果设置了网络图片,此图片会先下载会本地,之后再当作本地图片分享,因此延迟较大。bitmap则好一些,但是由于bitmap并不知道图片的格式,因此都会被当作png编码,再提交微信客户端。此外,SHARE_EMOJI支持gif文件,但是如果使用imageData,则默认只是提交一个png图片,因为bitmap是静态图片。


sharesdk会将网络图片或者图片都下载到本地,所以我们这边必须申请存储权限。
在申请完存储权限后分享,成功!问题解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值