友盟官方文档
http://dev.umeng.com/social/android/quick-integration?spm=0.0.0.0.pG0caE
1. 产品概述
关于分享和授权的sdk接口,我们在v5.0做出了巨大的改变,精简了接口调用的代码。并将分享授权,与评论等功能做出了隔离,使结构更加清晰。所以本版本的功能也只有分享与授权并无其他功能,请开发者注意。
注意:本文示例代码只有分享与授权功能,并对接口进行了调整,如需要原功能的开发者,请继续使用v4.3.0版本。
2. 获取友盟Appkey
如果你之前已经在友盟注册了应用,并获取到了Appkey,可以继续使用它.
如果你尚未在友盟注册开发者账号,需要先注册,注册之后登录你的账号,点击添加新应用,填写完应用基本信息后,将进入"下载SDK并添加代码"页面,此页面即可得到Appkey。
3. 下载官方SDK
关于这一步,自行到官网下载即可,无非就是把下载好的jar包拷贝到项目中(按友盟官方文档来即可)
4、AndroidManifest配置
在AndroidManifest.xml中的 <application></<application>中设置
(1)友盟Appkey(注意value需要设置成你自己的值,否则会失败)
<meta-data
android:name="UMENG_APPKEY"
android:value="561cae6ae0f55abd990035bf">
</meta-data>
(2)增加权限
<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.INTERNET" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<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.SET_DEBUG_APP" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
(3)针对不平台所需要添加的数据,按照自己需要的平台添加对应的配置
微信:
<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.umeng.qq.tencent.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.umeng.qq.tencent.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"/>
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"/>
分享编辑页
<activity
android:name="com.umeng.socialize.editorpage.ShareActivity"
android:theme="@style/Theme.UMDefault"
android:excludeFromRecents="true"/>
5、建立一个application文件,随便起一个名字,比如叫App,别忘了在AndroidManifest文件中配置(如果本身已有,不需要重新建立):
在application类中配置第三方分享平台的appkey以及友盟的初始化:
public class MyApplication extends Application {
{
PlatformConfig.setWeixin("wx7db093453016ae52", "d0d9e6d67b85b128261d4131515d3a97");
PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
}
@Override
public void onCreate() {
super.onCreate();
//初始化友盟sdk
UMShareAPI.get(this);
}
关于各个平台的配置,各个平台的配置,建议放在全局Application或者程序入口(需要到各个平台去注册申请)
PlatformConfig.setWeixin("wx967daebe835fbeac", "5bb696d9ccd75a38c8a0bfe0675559b3");
//微信 appid appsecret
PlatformConfig.setSinaWeibo("3921700954","04b48b094faeb16683c32669824ebdad");
//新浪微博 appkey appsecret
PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
// QQ和Qzone appid appkey
PlatformConfig.setAlipay("2015111700822536");
//支付宝 appid
PlatformConfig.setYixin("yxc0614e80c9304c11b0391514d09f13bf");
//易信 appkey
PlatformConfig.setTwitter("3aIN7fuF685MuZ7jtXkQxalyi", "MK6FEYG63eWcpDFgRYw4w9puJhzDl0tyuqWjZ3M7XJuuG7mMbO");
//Twitter appid appkey
PlatformConfig.setPinterest("1439206");
//Pinterest appid
PlatformConfig.setLaiwang("laiwangd497e70d4", "d497e70d4c3e4efeab1381476bac4c5e");
//来往 appid appkey
---------------------至此友盟分享的配置已经完成---------------------------------
接下来就是分享的完整代码了
public class ShareUtils {
private Activity activity;
private String targetUrl; //分享的链接
public ShareUtils(Activity activity, String targetUrl){
this.activity = activity;
this.targetUrl = targetUrl;
}
//多平台分享(qq、qq空间、微信、微信朋友圈)
public void shareMorePlatform() {
new ShareAction(activity).setDisplayList(
SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE, SHARE_MEDIA.WEIXIN,
SHARE_MEDIA.WEIXIN_CIRCLE)
.setShareboardclickCallback(shareBoardlistener).open();
}
private ShareBoardlistener shareBoardlistener = new ShareBoardlistener() {
@Override
public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) {
if (share_media == null) {
if (snsPlatform.mKeyword.equals("umeng_sharebutton_custom")) {
Toast.makeText(activity, "add button success", Toast.LENGTH_SHORT).show();
}
} else {
new ShareAction(activity)
.setPlatform(share_media)
.setCallback(umShareListener)
.withText("来自知么网络的分享")
//分享图片
.withMedia(new UMImage(activity, R.drawable.applogo120))
//分享网络链接
.withTargetUrl(targetUrl)
.share();
}
}
};
private UMShareListener umShareListener = new UMShareListener() {
@Override
public void onResult(SHARE_MEDIA platform) {
Log.i("plat", "---->分享成功了");
Log.i("plat", "platform" + platform);
Toast.makeText(activity, "分享成功啦", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
Toast.makeText(activity, "分享失败啦", Toast.LENGTH_SHORT).show();
if (t != null) {
Log.i("plat", "---->分享失败了");
Log.i("throw", "throw:" + t.getMessage() + t.getCause());
}
}
@Override
public void onCancel(SHARE_MEDIA platform) {
Toast.makeText(activity, "分享取消了", Toast.LENGTH_SHORT).show();
}
};
}
6、关于微信分享
在你的项目的包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。这里注意一定是包名路径下,例如我的包名是com.umeng.soexample,则配置如下:(需要注意,如果使用精简版WXCallbackActivity的路径为com.umeng.weixin.callback.WXCallbackActivity,如果使用完整版路径是com.umeng.socialize.weixin.view.WXCallbackActivity)
关于微信平台申请对应的appkey需要的注意事项,(我的项目一开始就是没有在微信平台设置好这个签名,就一直打不开微信分享)
1)签名
2)包名(必须是你的项目的包名)
签名的获取可以参考这篇博客
<a href="http://blog.csdn.net/liupengcheng201/article/details/51681419"> 微信开放平台中android 应用签名的获取</a>
微信签名说明
由于微信的签名过程跟验证流程较多,出错的可能性较大,这里将对微信的签名过程跟验证做详细的说明。
首先必须确保正确设置微信AppID及secret 工程的包名必须同申请应用的包名一致。 在微信开放平台填写你App的的签名,测试、发布时要保证App的签名跟微信开放平台的签名一致。 开发者的应用需要通过审核。开发者在申请应用必须要通过微信官网的审核才能进行调试,可以使用签名工具自行检查比对
8.3.1 获取签名
获取应用签名方式有两种
8.3.1.1 方式一:
用eclipse导出 带签名 的apk文件,注意此时选择的签名文件是你发布app时的签名文件。在导出的最后一步,eclipse会显示一个Certificate fingerprints(证书指纹),如下图。此时找到MD5值,将该MD5值复制出来,按照“ 去掉冒号(:),大写转小写 ”的规则装换,此时字符串就是签名。
8.3.1.2 方式二:
导出 带签名 的apk文件,将该apk文件安装至手机中。安装微信的签名工具,打开应用程序,即可得到签名。
将获取到的签名和下图进行比对
注意如果修改了微信平台的包名和签名,需要重装微信客户端后才可以测试,否则本地会保留之前的签名缓存
7、QQ及Qzone登录
实现方法同样如上,注意下面几点:
QQ及Qzone登录都必须安装QQ客户端,并且只能跳转QQ客户端实现登录,无法跳转到Qzone客户端
QQ及Qzone登录需要确保在腾讯平台通过审核或添加测试账号,否则会报错110406
QQ及Qzone登录必须确保apk签名与腾讯平台上传的apk签名匹配,否则会报错100044,出现此错误请联系腾讯平台人员(QQ:800013811 )修改apk签名
注意将Android manifest xml里的 腾讯平台APPID替换为自己申请的APPID,注意tencent前缀不要修改,否则无法正常实现QQ及Qzone登录
平台授权,是需要安装对应的客户端的。新浪微博,豆瓣网,人人网除外,新浪和人人如果本地安装了对应平台是走本地授权,如果没有安装,需要走网络授权
网友评论