美文网首页
Android调用sharesdk过程及问题

Android调用sharesdk过程及问题

作者: 五月笑忘 | 来源:发表于2018-09-12 16:20 被阅读101次

    具体配置方法详见官网,我这边使用的离线配置,即没有使用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是自己申请时后台分配的,根据后台数据如实替换即可

    1. 在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" />
    

    每个字段的意思详见上面链接的官网教程

    1. 启动分享
      在需要弹出分享页面进行分享的页面,添加以下方法
    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会将网络图片或者图片都下载到本地,所以我们这边必须申请存储权限。
    在申请完存储权限后分享,成功!问题解决

    相关文章

      网友评论

          本文标题:Android调用sharesdk过程及问题

          本文链接:https://www.haomeiwen.com/subject/clvvgftx.html