您的位置:首页 > 其它

集成友盟分享-社会化组件

2016-11-14 18:56 417 查看
之前做友盟分享,真的是坑的不轻啊

首先,我是到http://dev.umeng.com/social/android/sdk-download下载的SDK,本人下载的是友盟最新的精简版





如果有人想看官方的也可以到友盟的官方文档;

首先,集成之前,我们的准备工作,一般我们做项目,也就是分享到微信,朋友圈,QQ,QQ空间,新浪微博等,那么我们就要到各个开发平台去申请注册,并创建一个应用,记得一定的保存好各个平台的生成的APPKey和AppID,到我们分享的时候会用到的,尤其是微信的开放平台,AppStrect值,只是在申请账号之后,马上要复制下来,如果错过了,后续是打不开的;

注意:在这里,我要特地提一下,我们注册微信是需要我们的包名,和签名的,包名就是我们项目的包名如下:



而签名也是相当重要的,想当年我也是深受其害啊,那么我们得去微信的开发平台去下载签名工具;将你要运行的项目打包先运行到手机上,记得一定是打包后的项目,然后再运行你下载的签名工具,把你项目的包名(如上图所示)输入到提示框中,生成签名,复制下来,填入微信的平台,包名一定要跟你打包运行的项目包名一致,否则无法生成签名,生成的签名也必须跟填入微信的平台的签名一致,否则,无法分享,如果是第一次申请微信的账号,会有一个礼拜的审核期,审核期间是不能用的。



好了,现在我们也准备开始真正的集成友盟了

第一,我们把我们下载的友盟SDK打开,将main和platforms里面的资源文件复制到我们的项目当中,根据我们的寻求选择不同的平台,


如果大家嫌一个个打开复制麻烦,就用另一种比较简单的方法,大家可以看到我们下载的SDK有一个Jar包如下:



选中,右键,打开,会弹出一个窗口,大家可以先选中,我们想要分享的平台和开发工具,点击“OK”



操作之后,我们会看到,我们的SDK中多了个文件



打开这个文件,把相应的文件夹中的资源复制的我们自己的项目当中

在我们项目的包名下 创建一个包为wxapi的,并在这个包下创建类WXEntryActivity继承

WXCallbackActivity

用来显示微信分享的回调,如:你的包名如果是com.exempl那么你的类就建在com.exempl.wxapi下;

第二,开始配置我们的项目清单文件吧

首页,是友盟需要的权限

<!-- 友盟分享需要的权限 -->
<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.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- QQ、QQ空间所需权限 -->
<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" />


然后就是我们个个平台的,不要复制本人的AppKey值,因为包名不同,就算你们复制去,也是不能用的。把下面Value改为自己的Key值

<!-- 友盟APPKey -->
<meta-data
android:name="UMENG_APPKEY"
android:value="57fc5cfae0f55a3ede00057f" />


QQ

<!-- QQ的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" />
<!-- 这里需要配置自己QQ互联的AppID:tencentXXXXXX,和代码中保持一致 -->
<data android:scheme="tencent1105673065" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />


注意:其中如下,你们要将后面的数据改为你们自己的APPID,要跟你们代码中保持一致

<data android:scheme="tencent1105673065" />


微信

<!-- 微信回调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
android:name="com.umeng.socialize.editorpage.ShareActivity"
android:excludeFromRecents="true"
android:theme="@style/Theme.UMDefault" />


因为我们用的是精简版的。所以不需要新浪微博的;

第三,是我们的代码中的了

找到我们的程序入口,Application,我们可以自定义一个App继承自Application,在类中添加上自己的各个平台,把下面的都换成自己的

{
//微信
PlatformConfig.setWeixin("wxc5fab299a262583c", "a95816e54706b9977e787e2a743f1402");
//新浪微博
PlatformConfig.setSinaWeibo("3586667763", "23030343394e0d5ac7aac0646c802f29");
//QQ
PlatformConfig.setQQZone("1105673065", "7tAnzz96J2PHijNW");
//如果微博分享不成功,出现文件不存在c8998错误,可以去微博开放平台检查是否申请该项目的分享功能,并且确认
/*Config.REDIRECT_URL="http://sns.whalecloud.com/sina2/callback";*///需要替换成自己的回调地址

}


然后在方法中初始化

@Override
public void onCreate() {
super.onCreate();
//开启友盟
UMShareAPI.get(this);

}


那么现在最基本的都已经完成了,让我们来实现分享吧

在我们要做分享的页面,先获得分享分服务对象

/*友盟分享服务*/
public ArrayList<SnsPlatform> platforms = new ArrayList<SnsPlatform>();


以及我们自定义分享的标题,图片,内容和URL

//分享的标题
String fenxiang_title;
//分的内容
String fenxiang_content;
//分享的URL
String fenxinag_url;
//分享的图片
UMImage image;


然后,根据需求为他们赋值,图片可以是本地的,当然也可以分享视频,音频之类的,如果有兴趣的话可以到友盟官方文档去学习更多

//设置友盟分享的内容
fenxiang_title="友盟分享标题";
fenxiang_content="友盟分享内容";
fenxinag_url="www.baidu.com";
image=new UMImage(Home_ReDian_Informetion_Activity.this,R.mipmap.app_logo);


然后,点击弹出,分享面板,(友盟自带的,如果用自己写的Dialog做分享面板,则不需要)

new ShareAction(this).setDisplayList(SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE, SHARE_MEDIA.SINA)
.withTitle(fenxiang_title)
.withText(fenxiang_content)
.withMedia(image)
.withTargetUrl(fenxinag_url)
.setCallback(umShareListener)
.open();


如果大家想自己写分享的面板来调用分享的方法也很简单

在我们调用分享面板的地方,弹出我们自己的的面板,根据不同的监听,实现不同平台的分享

QQ

new ShareAction(Home_ReDian_Informetion_Activity.this).setPlatform(SHARE_MEDIA.QQ).setCallback(umShareListener)
.withExtra(image)
.withTargetUrl(fenxinag_url)
.withTitle(fenxiang_title)
.withText(fenxiang_content)
.share();

QQ空间

new ShareAction(Home_ReDian_Informetion_Activity.this).setPlatform(SHARE_MEDIA.QZONE).setCallback(umShareListener)
.withExtra(image)
.withTargetUrl(fenxinag_url)
.withTitle(fenxiang_title)
.withText(fenxiang_content)
.share();

微信

new ShareAction(Home_ReDian_Informetion_Activity.this).setPlatform(SHARE_MEDIA.WEIXIN).setCallback(umShareListener)
.withExtra(image)
.withTargetUrl(fenxinag_url)
.withTitle(fenxiang_title)
.withText(fenxiang_content)
.share();

微信朋友圈

new ShareAction(Home_ReDian_Informetion_Activity.this).setPlatform(SHARE_MEDIA.WEIXIN_CIRCLE).setCallback(umShareListener)
.withExtra(image)
.withTargetUrl(fenxinag_url)
.withTitle(fenxiang_title)
.withText(fenxiang_content)
.share();

新浪微博

new ShareAction(Home_ReDian_Informetion_Activity.this).setPlatform(SHARE_MEDIA.SINA).setCallback(umShareListener)
.withExtra(image)
.withTargetUrl(fenxinag_url)
.withTitle(fenxiang_title)
.withText(fenxiang_content)
.share();


之后,别忘了,还有友盟分享回调的监听,必不可少的!

private UMShareListener umShareListener = new UMShareListener() {
@Override
public void onResult(SHARE_MEDIA platform) {
if(platform.name().equals("WEIXIN_FAVORITE")){
Toast.makeText(Home_ReDian_Informetion_Activity.this,platform + " 收藏成功啦",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(Home_ReDian_Informetion_Activity.this, platform + " 分享成功啦", Toast.LENGTH_SHORT).show();
}
}

@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
Toast.makeText(Home_ReDian_Informetion_Activity.this,platform + " 分享失败啦", Toast.LENGTH_SHORT).show();
}

@Override
public void onCancel(SHARE_MEDIA platform) {
Toast.makeText(Home_ReDian_Informetion_Activity.this,platform + " 分享取消了", Toast.LENGTH_SHORT).show();
}
};


还有友盟分享的回跳方法

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}

让后就可以运行了,如果大家看了我的博客有遇到什么问题的话,可以私信我,也可以评论或留言!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: