Android 友盟分享详细集成过程及所遇问题解决
最近项目需要针对微信、朋友圈、QQ、QQ空间集成友盟分享的功能,说实话,我也是第一次做,期间碰到过很多问题,这篇随笔就来写一下我是怎么集成友盟分享的,还有碰到哪些问题,都是怎样解决的!
其实集成友盟并不是很难,跟着集成文档一步一步走下来就可以,而且下载的友盟SDK会附带Demo,但是Demo中有很多东西是用不上的,所以就需要我们选择性的摘取有用的部分!
如需转载请注明出处:http://www.cnblogs.com/upwgh/p/6382085.html
1-获取友盟Appkey
如果你之前已经在友盟注册了应用,并获取到了Appkey,可以继续使用它.
如果你尚未在友盟注册开发者账号,需要先注册,注册之后登录你的账号,点击添加新应用,填写完应用基本信息后,将进入"下载SDK并添加代码"页面,此页面即可得到Appkey。
2-下载SDK并解压到本地
到友盟官网下载最新版本U-Share SDK,现在的版本是v6.2.2
因为项目中只需要集成微信、朋友圈、QQ、QQ空间,所以只勾选了这两项,微信完整版是带有支付功能,没有支付功能的话只需要勾选精简版就可以了。
接下来就到我们的项目中了
3-环境配置(AndroidManifestXml)
3-1权限配置
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
3-2注册相关的Activity
微信:
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
qq完整版:
<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"
android:configChanges="orientation|keyboardHidden|screenSize"/>
注意:这里要放自己项目在QQ开放平台的id,而且前面的tencent是一定不能省略的,否则在运行的时候,会报QQ配置错误的问题。
3-3友盟Appkey及相关第三方key配置
在AndroidManifest.xml中设置友盟Appkey
<meta-data
android:name="UMENG_APPKEY"
android:value="561cae6ae0f55abd990035bf">
</meta-data>
在Application中配置第三方平台的key
{
//微信和QQ开放平台对应的AppId和Appkey
PlatformConfig.setWeixin("wx967daebe835fbeac", "5bb696d9ccd75a38c8a0bfe0675559b3");
PlatformConfig.setQQZone("", "c7394704798a158208a74ab60104f0ba"); }
在application中初始化sdk,这个初始化最好放在application的程序入口中,防止意外发生:
public void onCreate() {
super.onCreate();
//开启debug模式,方便定位错误,具体错误检查方式可以查看http://dev.umeng.com/social/android/quick-integration的报错必看,正式发布,请关闭该模式
Config.DEBUG = true;
UMShareAPI.get(this);
}
4-代码实现
4-1、解压下载好的SDK,将main和platforms下面的libs里面的jar包导入到项目中(复制粘贴。。。),并添加依赖。
4-2、包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。这里注意一定是包名路径下,例如我的包名是com.umeng.soexample,则配置如下:(需要注意,如果使用精简版WXCallbackActivity的路径为com.umeng.weixin.callback.WXCallbackActivity,如果使用完整版路径是com.umeng.socialize.weixin.view.WXCallbackActivity)
4-3、功能代码(代码部分只贴出部分重点内容,如有疑问请留言)
4-3-1 分享会掉监听
//分享回调
private UMShareListener umShareListener = new UMShareListener() {
@Override
public void onResult(SHARE_MEDIA platform) {
Log.d("plat","platform"+platform);
ToastUtil.showToast("分享成功");
// if (platform.toString().equals("QQ")){
// ToastUtil.showToast("手机QQ分享成功");
// }else if (platform.toString().equals("QZONE")){
// ToastUtil.showToast("QQ空间分享成功");
// }else if (platform.toString().equals("WEIXIN")){
// ToastUtil.showToast("微信好友分享成功");
// }else if (platform.toString().equals("WEIXIN_CIRCLE")){
// ToastUtil.showToast("微信朋友圈分享成功");
// } } @Override
public void onError(SHARE_MEDIA platform, Throwable t) {
ToastUtil.showToast("分享失败");
if(t!=null){
Log.d("throw","throw:"+t.getMessage());
}
} @Override
public void onCancel(SHARE_MEDIA platform) {
ToastUtil.showToast("分享取消");
}
};
这是对于分享成功、失败、取消所对应的回调,对分享结果做相应的处理(这部分代码要放在成员变量)
4-3-2 点击分享事件
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.tv_cancle:
popupWindow.dismiss();
break;
case R.id.rl_common_title_exit:
initPopupWindow();
//设置popupWindow显示的位置
popupWindow.showAtLocation(mPopView, Gravity.BOTTOM, , );
backgroundAlpha(0.5f);
break;
case R.id.qq:
new ShareAction(ShowWebViewActivity.this)
.setPlatform(SHARE_MEDIA.QQ)
.withText(content).withTitle(title).withTargetUrl(linkHref).withMedia(image)
.setCallback(umShareListener)
.share();
popupWindow.dismiss();
break;
case R.id.weixin:
new ShareAction(ShowWebViewActivity.this)
.setPlatform(SHARE_MEDIA.WEIXIN)
.withText(content).withTitle(title).withTargetUrl(linkHref).withMedia(image)
.setCallback(umShareListener)
.share();
popupWindow.dismiss();
break;
case R.id.kongjian:
new ShareAction(ShowWebViewActivity.this)
.setPlatform(SHARE_MEDIA.QZONE)
.withText(content).withTitle(title).withTargetUrl(linkHref).withMedia(image)
.setCallback(umShareListener)
.share();
popupWindow.dismiss();
break;
case R.id.pengyouquan:
new ShareAction(ShowWebViewActivity.this)
.setPlatform(SHARE_MEDIA.WEIXIN_CIRCLE)
.withText(content).withTitle(title).withTargetUrl(linkHref).withMedia(image)
.setCallback(umShareListener)
.share();
popupWindow.dismiss();
break;
}
}
标红的这部分是需要分享的内容,根据需要自己进行初始化
/**\
* 分享链接、title、内容
*/
String linkHref = "分享链接";
String title = "分享标题!";
String content = "分享内容";
//分享图片
private UMImage image = null;
4-3-3 分享弹窗
大家应该看出来了,我的分享面板是写的一个PopupWindow
关于PopupWindow我有写过一篇相关的随笔http://www.cnblogs.com/upwgh/p/5910261.html
不同的是因为需要,分享弹窗弹出的时候,背景要变色,弹窗消失的时候,背景要恢复,随意写了一个简单的动画。
initPopupWindow():
private void initPopupWindow() {
/**
* 实例popupWindow对象
*/
popupWindow = new PopupWindow(mPopView, GridLayout.LayoutParams.MATCH_PARENT, GridLayout.LayoutParams.WRAP_CONTENT);
//设置popupWindow中的item可以被点击,这句话是必须要添加的
popupWindow.setFocusable(true);
//设置动画
popupWindow.setAnimationStyle(R.style.mypopwindow_anim_style);
//设置PopupWindow的背景
//如果不设置背景,会导致无论是点击外部区域还是Back键都无法dismiss掉popupWindow
ColorDrawable dw = new ColorDrawable(0xb0000000);
popupWindow.setBackgroundDrawable(dw);
}
弹窗弹出动画:
<style name="mypopwindow_anim_style">
<!-- 指定显示的动画xml -->
<item name="android:windowEnterAnimation">@anim/popu_show</item> <!-- 指定消失的动画xml -->
<item name="android:windowExitAnimation">@anim/popu_hide</item>
</style>
popu_show.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration=""
android:fromYDelta="100%p"
android:toYDelta="" /> <alpha
android:duration=""
android:fromAlpha="0.0"
android:toAlpha="1.0" />
</set>
popu_hide.xml:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"> <translate
android:duration=""
android:fromYDelta=""
android:toYDelta="50%p" /> <alpha
android:duration=""
android:fromAlpha="1.0"
android:toAlpha="0.0" />
</set>
最后设置分享弹窗弹出时背景的变化:
/**
* 设置添加屏幕的背景透明度
* @param bgAlpha
*/
public void backgroundAlpha(float bgAlpha) {
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha = bgAlpha; //0.0-1.0
getWindow().setAttributes(lp);
popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override
public void onDismiss() {
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.alpha = 1f;
getWindow().setAttributes(lp);
}
});
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
}
以上就是这次分享功能的主要内容了,写的可能不是很好,大家多多包涵,如果有错误或者不明白的地方,欢迎留言哈~~~
Android 友盟分享详细集成过程及所遇问题解决的更多相关文章
- UmengShareDemo【友盟分享SDK集成,基于V6.9.3版本】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这里简单记录下友盟分享SDK集成的步骤. 如果想要使用自定义分享对话框实现,请参考<ShareDialogDemo[分享对话框 ...
- IOS9.0 之后友盟分享详细过程
一: 申请友盟的AppKey(友盟的Key是根据应用的名称生成的!) 在友盟注册了你自己的开发者账号后就可以申请AppKey了.然后在这个方法里面设置Key - (BOOL)application:( ...
- iOS9.0 友盟分享详细过程
一: 申请友盟的AppKey(友盟的Key是根据应用的名称生成的!) 在友盟注册了你自己的开发者账号后就可以申请AppKey了.然后在这个方法里面设置Key - (BOOL)application:( ...
- Android 友盟分享躺过的几个坑,大坑,坑爹啊
前言:公司上线了一个项目,做Android 客户端集成友盟分享,在做得过程中,遇到了下面3个问题,希望其他小伙伴注意. ) 错误1: 1.错误描述 我是照着友盟的集成文档一步一步的集成的,做完后,发现 ...
- Android 友盟统计的集成与使用(包含多渠道打包配置)
前言 app上线后,一般公司都希望跟踪app在市场上的使用情况.包括新增用户.活跃用户.渠道信息.错误信息等,还有例如商城类的app,需要跟踪用户最喜欢浏览哪种类型的店铺或商品.这些都可以通过集成友盟 ...
- 友盟分享SDK集成步骤
1.官方注册appID. 2.menifest添加和声明umeng相关的activity以及appKey. 3. // 首先声明一个controller变量,由友盟服务工厂类直接取得友盟社交服务. m ...
- UmengAppDemo【友盟统计SDK集成以及多渠道打包配置,基于V7.5.3版本】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这里只是记录下集成友盟统计SDK以及简单配置多渠道打包的步骤.所以1.该Demo不能运行:2.配置多渠道打包只是一种简单的写法,具体 ...
- android 集成友盟分享之后,想自定义分享面板的看过来
第一种情况 首先上传一张默认的友盟分享的效果图 看起来还不错,但是总是有这样那样的原因,需要我们对默认效果做出一些改变. 第二种情况 如果你想做出下面的效果: 或者这样的效果 : 总之上面的效果总是在 ...
- Android 友盟社会化组件-分享实现
本文章链接地址:http://dev.umeng.com/social/android/share/quick-integration 分享快速集成 1 产品概述 友盟社会化组件,可以让移动应用快速具 ...
随机推荐
- Mysql基本操作整理
1.登录数据库 格式: mysql -h主机地址 -u用户名 -p用户密码 –P端口 –D数据库 –e “SQL 内容”>mysql -uroot -p 数据库名称~~~~~~~~~~~~~~~ ...
- github 更新fork分支
在github上开发代码的时候我们习惯的是fork一个分支,然后修改再往主分支push request,这样就可以保证多人开发, 但是随着时间的推移,自己fork的版本和主分支的版本差异越来越大; 这 ...
- 调用图灵机器人API实现Android智能机器人
非常感谢CSDN博客上的鸿洋哥,他贴出的源码是我所做的工作的基础,鸿洋哥博客链接http://blog.csdn.net/lmj623565791/article/details/38498353 下 ...
- iOS自定义字体及类目 分类: ios技术 2015-05-15 16:34 195人阅读 评论(0) 收藏
1:获取字体文件 从各种渠道下载字体文件ttf, 网站或者从别的ipa里扣出来.(以fzltxh.ttf为例) 2:将fzltxh.ttf文件拷贝到工程中 3:在Info.plist中添加项: Fon ...
- 【转】Linux正则表达式使用指南
正则表达式是一种符号表示法,用于识别文本模式.Linux处理正则表达式的主要程序是grep.grep搜索与正则表达式匹配的行,并将结果输送至标准输出. 1. grep匹配模式 grep按下述方式接受选 ...
- leetcode--014 Gas station
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGoAAADsCAIAAACjc9eHAAAgAElEQVR4nO3dTa7bRt4v4HczXoH2kS
- C#中的逆变和协变
msdn 解释如下: “协变”是指能够使用与原始指定的派生类型相比,派生程度更大的类型. “逆变”则是指能够使用派生程度更小的类型. 解释的很正确,大致就是这样,不过不够直白. 直白的理解: “协变” ...
- Jquery的AJAX应用详解
案例一:取得服务端当前时间 简单形式:jQuery对象.load(url),返回结果自动添加到jQuery对象代表的标签中间 <body> 当前时间: <span id=" ...
- OSG实现场景漫游(转载)
OSG实现场景漫游 下面的代码将可以实现场景模型的导入,然后在里面任意行走,于此同时还实现了碰撞检测. 源代码下载地址: /* * File : Travel.cpp * Description : ...
- samba.conf 范例
# Sample configuration file for the Samba suite for Debian GNU/Linux. # # This is the main Samba con ...