您的位置:首页 > 移动开发 > 微信开发

社会化分享(附源码)

2015-11-17 17:08 579 查看
实现微信(好友、朋友圈)、QQ(好友、空间)、新浪微博等社会化分享方式。

前言

现在的app几乎里面都包括社会化分享和第三方登录这两个功能,前段时间给大家分享了关于几种(第三方登录)的实现,今天再给大家分享关于社会化分享的几种方式。

在关于第三方登录的那篇文章中就已经提到了mob这个第三方平台,我们直接调用其SDK即可。市面上做社会化分享平台的跟人感觉不错的:mob和友盟,根据个人或者公司的需求来选择吧。

正文

再做社会化分享的时候,mob里面给我们提供了一篇文章详细的讲解,如何实现的。

既然我们使用的是第三方平台,所以相对于我们自己实现要简单的很多。

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

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

注册和创建应用的步骤我想就不用我多说了。

SDK地址(http://www.mob.com/#/downloadDetail/ShareSDK/android),下载下来发现无法解压(你们可以试一下),联系他们客服,他们说:上传错误,就给我发了一个。我把它和我的Dmeo放在一起,可供下载。

解压压缩包之后,找到ShareSDK for Android下Libs里面的两个文件夹,在后面我们会用到



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



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



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



2).添加应用信息:

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



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

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





Enable字段表示是否想分享到该平台

RedirectUrl字段表示是否使用客户端分享

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

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



注:如果RedirectUrl这个字段不填或填写不对会报以下错误:



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中。

之后,需要对上面的代码进行以下修改:



上图中,将红框部分的数字改成在腾讯开放平台申请到的AppId即可。

b.微信相关配置:

在你的build.gradle的applicationId相应目录下新建一个wxapi目录,在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity(例如应用程序build.gradle的applicationId为com.aohuan.jinghai_lifee,则新添加的类如下图所示) :



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).运行效果









其它分享方式我就不列出来了

如果你还需要做一些细微的调整,那就需要多看官方的东西了,这里贴出两个链接:

官网博客: 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



2.修改manifest.xml里面对应的信息:



3.修改ShareSDK.xml里面对应的信息:



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

参考文章

demo下载地址

GitHub下载地址:

https://github.com/fengmaolian/LoginAndShare
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息