社会化分享(附源码)

实现微信(好友、朋友圈)、QQ(好友、空间)、新浪微博等社会化分享方式。

前言

现在的app几乎里面都包括社会化分享和第三方登录这两个功能,前段时间给大家分享了关于几种(第三方登录)的实现,今天再给大家分享关于社会化分享的几种方式。
在关于第三方登录的那篇文章中就已经提到了mob这个第三方平台,我们直接调用其SDK即可。市面上做社会化分享平台的跟人感觉不错的:mob和友盟,根据个人或者公司的需求来选择吧。

正文

再做社会化分享的时候,mob里面给我们提供了一篇文章详细的讲解,如何实现的。
既然我们使用的是第三方平台,所以相对于我们自己实现要简单的很多。

到各大平台注册并创建应用

1.到mob平台去注册并创建应用

注册和创建应用的步骤我想就不用我多说了。
SDK地址(http://www.mob.com/#/downloadDetail/ShareSDK/android),下载下来发现无法解压(你们可以试一下),联系他们客服,他们说:上传错误,就给我发了一个。我把它和我的Dmeo放在一起,可供下载。
解压压缩包之后,找到ShareSDK for Android下Libs里面的两个文件夹,在后面我们会用到
社会化分享(附源码)_第1张图片

2.到微信、新浪微博和QQ平台去注册并创建应用获取AppKey

这是开放平台地址:

QQ开放平台地址:http://open.qq.com/
新浪微博开放平台地址:http://open.weibo.com/
微信开放平台地址:https://open.weixin.qq.com/

各大开放平台的网址及申请流程汇总:http://bbs.mob.com/forum.php?mod=viewthread&tid=275

3.配置

1).导入SDK到工程文件:

  • 新建library形式的module,删掉这个module中src/main目录里面的所有文件(包括删掉java、res、AndroidManifest.xml)
  • 复制第三方库的AndroidMainfest.xml、res、src文件(夹)到库目录的src/main目录中
  • 将src/main目录下的src目录重命名为java

    社会化分享(附源码)_第2张图片

我们将上图中的两个工程文件新建为两个Library module:ShareSDK和OneKeyShare,记得要将下面的这个文件夹中的东西也要拷到MainLibs这个module的libs文件夹下:

然后,需要注意的是,OneKeyShare这个module是依赖于ShareSDK这个module;而app这个module是依赖于OneKeyShare这个module。

社会化分享(附源码)_第3张图片

2).添加应用信息:

先在app这个module(即我们这个项目的module)下新建一个assets文件夹(即第三方资产目录),操作如下:

社会化分享(附源码)_第4张图片

然后,我们将上图中的ShareSDK.xml文件复制到assets目录下。

紧接着开始修改ShareSDK.xml文件中的代码。这里以新浪微博为例:

Enable字段表示是否想分享到该平台
RedirectUrl字段表示是否使用客户端分享

注:如果选择客户端分享,而手机没安装客户端则会使用网页版进行授权(除微信外)

新浪微博的回调地址RedirectUrl这个字段的值就是我们后台项目中的应用信息——>高级信息——>OAuth2.0 授权设置中的授权回调页这个字段,需要我们填写一个有效的地址就可以,例如下图:


注:如果RedirectUrl这个字段不填或填写不对会报以下错误:
社会化分享(附源码)_第5张图片

3).配置AndroidManifest.xml:

a. QQ相关配置:

<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" >
     <intent-filter>
         <data android:scheme="tencent1104646053" />
         <action android:name="android.intent.action.VIEW" />
         <category android:name="android.intent.category.BROWSABLE" />
         <category android:name="android.intent.category.DEFAULT" />
     </intent-filter>
</activity>

注意: MobUIShell的路径是固定的,一定要在“cn.sharesdk.framework”下,因为它在Share-Core中。

之后,需要对上面的代码进行以下修改:
社会化分享(附源码)_第6张图片
上图中,将红框部分的数字改成在腾讯开放平台申请到的AppId即可。

b.微信相关配置:

在你的build.gradle的applicationId相应目录下新建一个wxapi目录,在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity(例如应用程序build.gradle的applicationId为com.aohuan.jinghai_lifee,则新添加的类如下图所示) :
社会化分享(附源码)_第7张图片
WXEntryActivity.java的代码如下:

/* * 官网地站:http://www.mob.com * 技术支持QQ: 4006852216 * 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复) * * Copyright (c) 2013年 mob.com. All rights reserved. */
package com.example.wxapi;
import android.content.Intent;
import android.widget.Toast;
import cn.sharesdk.wechat.utils.WXAppExtendObject;
import cn.sharesdk.wechat.utils.WXMediaMessage;
import cn.sharesdk.wechat.utils.WechatHandlerActivity;
/** 微信客户端回调activity示例 */
public class WXEntryActivity extends WechatHandlerActivity {
    /** * 处理微信发出的向第三方应用请求app message * <p> * 在微信客户端中的聊天页面有“添加工具”,可以将本应用的图标添加到其中 * 此后点击图标,下面的代码会被执行。Demo仅仅只是打开自己而已,但你可 * 做点其他的事情,包括根本不打开任何页面 */
    public void onGetMessageFromWXReq(WXMediaMessage msg) {
        Intent iLaunchMyself = getPackageManager().getLaunchIntentForPackage(getPackageName());
        startActivity(iLaunchMyself);
    }
    /** * 处理微信向第三方应用发起的消息 * <p> * 此处用来接收从微信发送过来的消息,比方说本demo在wechatpage里面分享 * 应用时可以不分享应用文件,而分享一段应用的自定义信息。接受方的微信 * 客户端会通过这个方法,将这个信息发送回接收方手机上的本demo中,当作 * 回调。 * <p> * 本Demo只是将信息展示出来,但你可做点其他的事情,而不仅仅只是Toast */
    public void onShowMessageFromWXReq(WXMediaMessage msg) {
        if (msg != null && msg.mediaObject != null
                && (msg.mediaObject instanceof WXAppExtendObject)) {
            WXAppExtendObject obj = (WXAppExtendObject) msg.mediaObject;
            Toast.makeText(this, obj.extInfo, Toast.LENGTH_SHORT).show();
        }
    }
}

同时,在清单文件中进行声明:

<!--微信分享回调-->
<activity  android:name=".wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" android:theme="@android:style/Theme.Translucent.NoTitleBar"/>

4).添加代码

集成ShareSDK至少需要在两个位置添加代码,包括:

a.在项目的入口Activity,在其onCreate方法中插入下面的代码进行初始化:(这个方法越早调用越好)

ShareSDK.initSDK(this);

如果不在所有的ShareSDK的操作之前调用这行代码,就会抛出空指针异常。

b.在项目出口Activity的onDestroy方法中第一行插入下面的代码:

ShareSDK.stopSDK(this);

上方这行代码会结束ShareSDK的统计功能并释放资源。如果这行代码没有被调用,那么“应用启动次数”将会不准确,因为应用可能从来没有被关闭过(注:这一行代码我还是没用到,不知道会造成什么实质性的后果)。

注意:initSDK是可以重复调用的,其实ShareSDK建议在不确定的时候调用这个方法来保证ShareSDK被正确初始化。而stopSDK一旦被调用了,就必须重新调用initSDK才能使用ShareSDK的功能,否则会出现空指针异常。

在代码中调用此方法,即可打开一键分享功能进行分享:

private void showShare() {
 ShareSDK.initSDK(this);
 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);
 }

5).主代码

MainActivity.java:

package com.example.sharedemo;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.example.baseactivity.BaseActivity;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.onekeyshare.OnekeyShare;

public class MainActivity extends BaseActivity implements View.OnClickListener {
    private Button button1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(this);
    }

    //点击按钮,开始进行分享
    @Override
    public void onClick(View v) {
        OnekeyShare oks = new OnekeyShare();
        //关闭sso授权
        oks.disableSSOWhenAuthorize();

        // title标题:微信、QQ(新浪微博不需要标题)
        oks.setTitle("我是分享标题");  //最多30个字符

        // text是分享文本:所有平台都需要这个字段
        oks.setText("我是分享文本,啦啦啦~http://uestcbmi.com/");  //最多40个字符

        // imagePath是图片的本地路径:除Linked-In以外的平台都支持此参数
        //oks.setImagePath(Environment.getExternalStorageDirectory() + "/meinv.jpg");//确保SDcard下面存在此张图片

        //网络图片的url:所有平台
        oks.setImageUrl("http://7sby7r.com1.z0.glb.clouddn.com/CYSJ_02.jpg");//网络图片rul

        // url:仅在微信(包括好友和朋友圈)中使用
        oks.setUrl("http://sharesdk.cn");   //网友点进链接后,可以看到分享的详情

        // Url:仅在QQ空间使用


        oks.setTitleUrl("http://www.baidu.com");  //网友点进链接后,可以看到分享的详情

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

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ShareSDK.stopSDK(this);
    }
}

提示:如果imagePath和imageUrl同时存在,imageUrl将被忽略。

6).运行效果
社会化分享(附源码)_第8张图片
社会化分享(附源码)_第9张图片
社会化分享(附源码)_第10张图片

其它分享方式我就不列出来了
如果你还需要做一些细微的调整,那就需要多看官方的东西了,这里贴出两个链接:

官网博客: http://mob.com/index.php/share/index/media/cid/11
【ShareSDK】常见问题汇总:http://bbs.mob.com/forum.php?mod=viewthread&tid=30&extra=page%3D1
注:如果想要调整弹出Dialog的布局样式,参考http://www.cnblogs.com/smyhvae/p/4585340.html的第七条

注:由于我的源代码里面涉及到客户的信息,所以AppKey、AppSecret等信息,被我删掉了,如果想看我的Demo效果,需要修改小部分我的代码:
1.把我的com.example.wxapi换成你的applicationId(对应的包名).wxapi
社会化分享(附源码)_第11张图片
2.修改manifest.xml里面对应的信息:
社会化分享(附源码)_第12张图片
3.修改ShareSDK.xml里面对应的信息:

记得一定要打包进行测试,这样就可以了!!

参考文章

demo下载地址
GitHub下载地址:
https://github.com/fengmaolian/LoginAndShare

你可能感兴趣的:(源码,社会化,社会化分享,QQ-微信-微博)