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

Android 友盟分享 开发日记

2016-09-03 14:49 204 查看
公司项目涉及到分享的部分了,看友盟的平台相当的强大,觉得就用这个了,本以为也就一个上午的事情,哪知道在这个坑里面足足蹲了两天的时间,下面我将详细介绍下友盟分享的具体过程

tip:强烈建议配合开发文档一起看

首先,别先去下demo,人家的东西毕竟是人家的,copy过来说不定有很多冗余的东西,先打开的永远是人家的开发文档。

进去先注册个号:



注册完了去别的地方继续注册,你想要什么分享就需要去对方的开放平台注册下,已便于获取到他们对应的key和APPsecret,微信的分享最为复杂,我就以微信为例:



里面有一个项目签名可以使用Gen_Signature_Android获取签名工具。本工具在文章末尾给出。

注册下需要人工审核下,得过个几天,通过后就能看到了。



这个平台的APPsecret超能装逼,你得微信扫码认证才能获取到secret,并且以后每次获取都要扫一次码才能看。

其余平台的注册地址:

只需百度 **开放平台 即可,如(新浪微博开放平台,腾讯开放平台,等等)

然后回到友盟的分享功能那去



很容易的就找到了文档,进来人家就用红字标了个醒目的东西



所以,我下面介绍的也是针对于友盟sdk4.3版本,对于某些只用最新SDK的强迫症就请在此绕道,88啦。

还留下的继续哈,跟着文档走



注册完后开个项目就能拿到key了



下载的是4.3版本的SDK!!!可以看到目录是这样的



现在差不多就接入正题了,先把main包下的libs包导入到项目中,然后把res下的东西也抠过去



这时文档中说了需要添加工程引用,好,坑来了,可以不用添加,pass这一步。继续往下一步走:



这边我列入比较详细的配置信息,这里和文档有出入,请自行选择需要的

<!-- ###################声明SDK使用的相关权限###################### -->
<!-- 检测网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 获取mac地址作为用户的备用唯一标识 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 获取用户手机的IMEI,用来唯一的标识用户 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 缓存资源优先存入SDcard -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 允许应用程序联网,以便向我们的服务器端发送数据 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- QQ、QQ空间所需权限 -->
<uses-permission android:name="android.permission.GET_TASKS" />

<!-- *************************    分享相关的注册 START **************************** -->
<!-- 分享内容编辑页 -->
<activity
android:name="com.umeng.socialize.view.ShareActivity"
android:configChanges="orientation|keyboard"
android:launchMode="singleTask"
android:noHistory="true"
android:theme="@style/Theme.UMDialog"
android:windowSoftInputMode="stateVisible|adjustResize" >
</activity>

<!-- 腾讯SSO授权的Activity注册 -->
<activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true" >
<intent-filter>
<action android:name="android.intent.action.VIEW" />

<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />

<data android:scheme="tencent100424468" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />

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

<!-- 易信回调activity -->
<activity
android:name=".yxapi.YXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />

<!-- 人人SSO授权所需的OAuthActivity -->
<activity
android:name="com.renn.rennsdk.oauth.OAuthActivity"
android:configChanges="orientation|navigation|keyboardHidden" />

<!-- facebook相关 -->
<activity android:name=".activity.FacebookActivity" >
</activity>
<activity
android:name="com.facebook.LoginActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />

<!-- *************************    分享相关的注册 END **************************** -->
<meta-data
android:name="UMENG_CHANNEL"
android:value="Umeng" >
</meta-data>

又一个坑来了,可以看到,在腾讯SSO授权的Activity注册那里,有个<dataandroid:scheme="tencent100424468"/>看起来像key一样的东西,千万不要手贱把他改成你的腾讯开放平台注册项目得到的KEY,否则分享时会报错。

最后为了降低耦合度,开一个类来实现分享的功能

/**
* Created by fangwei
*/
public class UMshare {
// 首先在您的Activity中添加如下成员变量
public final UMSocialService mController = UMServiceFactory.getUMSocialService("com.umeng.share");

private Context context;
private Activity activity;

public UMshare(final Context context, View view) {
this.context = context;
//强转activity
activity = (Activity) context;

// 配置需要分享的相关平台
configPlatforms();

}
<span style="background-color: rgb(255, 255, 255);">
</span>
<pre style="font-family: 'Courier New'; font-size: 9pt;"><span style="background-color: rgb(255, 255, 255);"><em>/**
* </em><span style=" font-family: 宋体;"><em>调起分享页面
</em></span><span style=" font-family: 宋体;"><em> </em></span><em>*/
</em><strong>public void </strong>openshare() {
<strong>mController</strong>.getConfig().setPlatforms(SHARE_MEDIA.<strong><em>WEIXIN</em></strong>,
SHARE_MEDIA.<strong><em>WEIXIN_CIRCLE</em></strong>, SHARE_MEDIA.<strong><em>QQ</em></strong>, SHARE_MEDIA.<strong><em>QZONE</em></strong>, SHARE_MEDIA.<strong><em>SMS
</em></strong><strong><em>    </em></strong>);
<strong>mController</strong>.openShare(<strong>activity</strong>, <strong>false</strong>);
}</span>


/**
* 配置平台信息
*/
private void configPlatforms() {
// 添加QQ、QZone平台
addQQQZonePlatform();
// 添加微信、微信朋友圈平台
addWXPlatform();
// 添加短信平台
addSMS();
}

/**
* 添加短信平台</br>
*/
private void addSMS() {
// 添加短信
SmsHandler smsHandler = new SmsHandler();
smsHandler.addToSocialSDK();
}

/**
* @return
* @功能描述 : 添加微信平台分享
*/
private void addWXPlatform() {
// 注意:在微信授权的时候,必须传递appSecret
// <span style="font-family: Arial, Helvetica, sans-serif;">wx159fec67250430d8</span><span style="font-family: Arial, Helvetica, sans-serif;">是你在微信开发平台注册应用的AppID, 这里需要替换成你注册的AppID</span>
String appId = "wx159fec67250430d8";
String appSecret = "b9b6e13d0bb1542cd94e37a5a577c79a";
// 添加微信平台
UMWXHandler wxHandler = new UMWXHandler(activity, appId, appSecret);
wxHandler.addToSocialSDK();
// 添加微信朋友圈
UMWXHandler wxCircleHandler = new UMWXHandler(activity, appId, appSecret);
wxCircleHandler.setToCircle(true);
wxCircleHandler.addToSocialSDK();

}

/**
* @return
* @功能描述 : 添加QQ平台支持 QQ分享的内容, 包含四种类型, 即单纯的文字、图片、音乐、视频. 参数说明 : title, summary,
* image url中必须至少设置一个, targetUrl必须设置,网页地址必须以"http://"开头 . title :
* 要分享标题 summary : 要分享的文字概述 image url : 图片地址 [以上三个参数至少填写一个] targetUrl
* : 用户点击该分享时跳转到的目标地址 [必填] ( 若不填写则默认设置为友盟主页 )
*/
private void addQQQZonePlatform() {
String appId = "1105414515";
String appKey = "9WPzNBctj4aBdYiO";
// 添加QQ支持, 并且设置QQ分享内容的target url
UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(activity,
appId, appKey);
qqSsoHandler.setTargetUrl("http://www.umeng.com");
qqSsoHandler.addToSocialSDK();

// 添加QZone平台
QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(
activity, appId, appKey);
qZoneSsoHandler.addToSocialSDK();
}

/**
* 设置分享的内容
*/
public void setsharecontent(String content, String title, String url) {

QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(
activity, "1105414515",
"9WPzNBctj4aBdYiO");
qZoneSsoHandler.addToSocialSDK();
// 设置分享内容
//        mController.setShareContent("友盟社会化组件(SDK)让移动应用快速整合社交分享功能,http://www.umeng.com/social");
//分享的图片,用的是本地图片,请自行替换
UMImage localImage = new UMImage(context, R.mipmap.logofinal);

//微信的分享
WeiXinShareContent weixinContent = new WeiXinShareContent(localImage
);
weixinContent.setShareContent(content);
weixinContent.setTitle(title);
weixinContent.setTargetUrl(url);
mController.setShareMedia(weixinContent);

// 设置朋友圈分享的内容
CircleShareContent circleMedia = new CircleShareContent(localImage
);
circleMedia.setShareContent(content);
circleMedia.setTitle(title);
circleMedia.setTargetUrl(url);
mController.setShareMedia(circleMedia);

// 设置QQ空间分享内容
QZoneShareContent qzone = new QZoneShareContent();
qzone.setShareContent(content);
qzone.setTitle(title);
qzone.setTargetUrl(url);
mController.setShareMedia(qzone);

//QQ分享内容
QQShareContent qqShareContent = new QQShareContent();
qqShareContent.setShareContent(content);
qqShareContent.setTitle(title);
qqShareContent.setTargetUrl(url);
mController.setShareMedia(qqShareContent);

// 设置短信分享内容
SmsShareContent sms = new SmsShareContent();
sms.setShareContent(content + url);
mController.setShareMedia(sms);

}

}


这个类目前只集成了qq,qq空间,微信朋友圈,微信朋友,短信这5个,需要增加的可以自行增加进来,还有所有的分享平台要换成自己项目的key 和APPKEY,类的具体调用如下

/**使用友盟分享**/
UMshare uMshare = new UMshare("内容文本", "具有点击事件的VIEW ");
uMshare.setsharecontent("内容", "标题","URL");
<pre style="font-family: 'Courier New'; font-size: 9pt;"><span style="background-color: rgb(255, 255, 255);">uMshare.openshare();//调起分享界面</span>



ok,这样就大功告成了。

特别的,对于微信的分享和朋友圈的分享,网上会出现一堆这样那样的问题,我也遇到过一些问题,下面我将特别针对于微信不能分享的问题作出解答:

问:项目运行的时候点击微信分享为什么一闪而过?
答:首先,测试微信朋友圈分享的时候必须是已经打包了的项目,如果仅仅是在As或者Ec中点击run调试是没有用的。然后,如果是已经打包了的项目。一定要确保你当前项目的签名和微信开放平台注册时填的签名一致。如不一致,去平台更正。

问:微信分享完后回到项目就闪退,报错。
答:确保项目中存在一个名为 

的包。没有的话导入,友盟官方下载的4.3SDK里有。

衍生的问题:这个httpmine.jar包会与本项目的其他网络请求包相互冲突而导致编译不通过,怎么办?

答:引起jar包冲突的主要原因就是两个jar包之间纯在大量相同的源码,编译器认为这是不安全因素,所有会报编译不通过,解决方案1,删除与httpmine相冲突的包。解决方案2,对于AS,在build.gradle文件中加入忽视即可。对于EC,我就不知道了,没研究。

AS的具体忽视内容如下:

android {
packagingOptions {
exclude 'META-INF/DEPENDENCIES.txt'
exclude 'META-INF/LICENSE.txt'
exclude 'META-INF/NOTICE.txt'
exclude 'META-INF/NOTICE'
exclude 'META-INF/LICENSE'
exclude 'META-INF/DEPENDENCIES'
exclude 'META-INF/notice.txt'
exclude 'META-INF/license.txt'
exclude 'META-INF/dependencies.txt'
exclude 'META-INF/LGPL2.1'
}
}


问:微信要分享一段链接,为什么没有用?

答:微信的分享需要有内容+图片,并且缺一不可。具体添加方法如:

//微信的分享
WeiXinShareContent weixinContent = new WeiXinShareContent(localImage);
weixinContent.setShareContent(content);
weixinContent.setTitle(title);
weixinContent.setTargetUrl(url);
mController.setShareMedia(weixinContent);


在new WeiXinShareContent类的时候带上需要添加的图片即可。

以上就是在友盟推送过程中自己遇到的一些问题,可能不全,但还是把它以文字的形式分享出来,希望对有需要的人提供帮助。

附录:签名工具下载地址:http://download.csdn.net/detail/qq_26589227/9620818
一个比较完善的小DEMO可以参考,此demo有冗余文件,重复代码,仅供参考:http://download.csdn.net/detail/qq_26589227/9620823
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息