‘壹’ android分享图片和视频失败,怎么办
目前实现一键分享功能的方式有两种:
1.需要集成第三方官方SDK包,在获得官方授权后调用其API来完成一键分享功能,例如使用友盟分享等
优点:无缝集成,功能多
缺点:需要集成官方的SDK包并通过申请官方的授权才可进行开发
2.不需要使用任何第三方SDK包,可以直接调起实现了分享功能的应用的activity来进行分享
优点:不需要使用任何第三方SDK包和申请官方授权
缺点:需要手机安装你需要分享的应用(这一点非常重要,一开始测试的时候一直不成功,提示“没有应用可执行此操作”,后来找了很久才发现是我手机没有安装相对应的应用,这也是不好方便的地方)
‘贰’ 友盟-推送-Andorid-“Alias”是什么, 该如何使用
不少开发者在使用友盟推送的时候,对Alias的用法和使用场景不是太理解,这篇文章给大家普及一下Alias相关的内容:
我们先从产品层面上对Alias的设计思想说起,这样能帮助大家更好的理解和使用Alias。在我们官方文档里面,Alias的定义是: "设备别名,将别名与设备做绑定,便于部分App开发者使用自有账号或者第三方账号体系来做消息推送"。定义里面涉及到几个重要的点:
首先,Alias是和设备绑定的,友盟推送对设备的标识是device-token,也就是说,Alias与友盟device-token是绑定对应的。从这个层面来讲,Alias可以是开发者的账号系统(包括第三方账号体系),也可以是开发者自己对设备的标识体系(如安卓设备上的imei+mac),或者是其它的开发者能保证唯一性的ID体系,这些都是由开发者自己决定的。提问中问到是否可以把Alias理解为账号系统,狭义上讲可以这么理解,实际上,友盟推送赋予了Alias更多的灵活性。
其次,结合到越来越多的App提供第三方社交平台账号登陆的特点,我们在Alias的设计上也充分考虑到了账号的需求,所以在官方文档中,我们提到在使用Alias的时候,必须要关联一个alias_type, 如果是开发者自定义的alias(包括自有账号系统),这个alias_type是可以随便定义的;如果是用了第三方账号系统,我们预提供了20多种主流的开放平台的账号类型,如新浪微博(SINA_WEIBO), 微信(WEIXIN)等。填写alias_type的作用是,友盟推送会和友盟社会化分享服务做数据上的打通,更好的从数据层面发挥价值,为开发者服务。说到这里,我们再次精确一下Alias的概念,即别名(Alias)+别名类型(alias_type)与设备的绑定。
最后,我们来聊聊Alias的用法,这个也是开发者们非常关心的。我们Alias的绑定操作是在SDK端提供的,开发者只需要在SDK端调用mPushAgent.addAlias(alias, alias_type)这个接口,友盟推送SDK就负责把alias+alias_type与友盟的device-token做绑定,将绑定关系回传到友盟后端服务器。之后开发者就可以根据自有业务逻辑,调用友盟服务器端接口,根据Alias来做个性化推送了。由此来看,Alias的作用是能让开发者结合自有的账号(此处需要理解成广义的账号)体系,来做更个性化、精细化的推送。下图是一个简化的Alias架构,帮助大家理解Alias的用法:
关于Alias的相关接口,我们的友盟消息推送Android文档提供了非常丰富的接口供开发者调用:
[Java] 纯文本查看 复制代码
?
1
2
3
4
5
添加Alias
mPushAgent.addAlias("[email protected]", ALIAS_TYPE.SINA_WEIBO);
移除Alias
mPushAgent.removeAlias("[email protected]", ALIAS_TYPE.SINA_WEIBO);
注意,在App服务器端调用友盟服务器端接口做推送的时候,一定不要忘了传入alias_type的参数。
关于Alias基本的话题差不多解释清楚了,最后再和大家深入聊聊Alias用作账号系统涉及到多账号多设备登陆的问题,这个时候,alias_type就派上用场了,相信看过这个章节后,大家会对我们Alias的设计机制有更深入的理解:
1. 多个账号登陆同一台设备,具体还要细分为两种case:
如果是同一个alias_type,那么以最后绑定的alias为准。举个例子: (alias_A, alias_type_A)先做了绑定,之后(alias_B, alias_type_A)后做了绑定,那么,如果这个时候给alias_A发消息,设备是不会收到消息的,因为在友盟推送后台device-token是和最后登陆的alias_B做绑定的。这个在实际业务场景中也成立,最后一个登录的账号才是这台设备当前真实的用户。
如果不是同一个alias_type, 那么前后两个绑定的alias均生效。举个例子: (alias_A, alias_type_A)先做了绑定,之后是(alias_B, alias_type_B)做了绑定,那么不管是给alias_A发消息,还是给alias_B发消息,设备均能收到消息。因为alias_type变化之后,友盟推送后台确定不了这是同一个用户(eg: 同一个用户使用不同平台的账号登录),还是不同的用户(不同的用户,使用不同的账号登录),友盟只能简单的判定这两个不同alias_type的账号是两个不同的账号。这种场景是需要特别注意的,建议开发者在实际的集成过程中尽量避免这种使用场景。
2. 同一个账号登录多台设备:
这种情况处理起来就比较简单了,即一个alias和多个device-token做绑定。如果给这个alias发消息,我们会给所有和这个alias绑定的设备都去推送消息。
开发者在具体使用过程中,可能会想到Alias做了绑定(addAlias)或者解除(removeAlias)之后,多长时间能在后端生效。 Alias接口,是一个实时的接口,不管是在“测试模式”下,还是在“正式模式”下,都是实时生效的。不过在集成测试阶段,还是建议开发者把手头的设备添加到"测试模式"下的测试设备集合里面,关于“测试模式”的更多介绍,请参考友盟推送“测试模式”介绍。
‘叁’ android 友盟社会化组件 自定义分享列表怎么弄
<!--###################注册SDK使用的Activity######################-->
<!--分享编辑页-->
<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>
<!--############QQ空间和QQSSO授权的Activity注册############-->
<activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true">
<intent-filter>
<actionandroid:name="android.intent.action.VIEW"/>
<categoryandroid:name="android.intent.category.DEFAULT"/>
<categoryandroid:name="android.intent.category.BROWSABLE"/>
<!--100424468,如果你使用的公用账号,则不需要修改;否则修改成你在QQ开放平台申请的APPID-->
<dataandroid:scheme="tencent100424468"/>
</intent-filter>
</activity>
<activityandroid:name="com.tencent.plus.ImageActivity"/>
<activityandroid:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:screenOrientation="portrait">
</activity>
<!--###################添加UmengAppkey######################-->
<meta-data
android:name="UMENG_APPKEY"
android:value="xxxxxxxxxxxxxxxxxxxxxx">
</meta-data>
</application>
<uses-sdkandroid:minSdkVersion="8"/>
<!--###################声明SDK使用的相关权限######################-->
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><!--检测网络状态-->
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/><!--获取mac地址作为用户的备用唯一标识-->
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/><!--获取用户手机的IMEI,用来唯一的标识用户。-->
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><!--缓存资源优先存入SDcard-->
<uses-permissionandroid:name="android.permission.INTERNET"/><!--允许应用程序联网,以便向我们的服务器端发送数据。-->
<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/><!--用于评论模块分享位置信息-->
<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/><!--用于评论模块分享位置信息-->privatevoidinitialUM(){
//首先在您的Activity中添加如下成员变量
mController=UMServiceFactory.getUMSocialService("com.umeng.share",
RequestType.SOCIAL);
//设置分享内容
mController
.setShareContent("友盟社会化组件(SDK)让移动应用快速整合社交分享功能,http://www.umeng.com/social");
mController
.setShareMedia(newUMImage(mContext,R.drawable.ic_launcher));//设置分享图片内容
SocializeConfigconfig=mController.getConfig();
//开通短信
config.setShareSms(true);
config.setShareMail(true);
config.setPlatforms(SHARE_MEDIA.QZONE,SHARE_MEDIA.TENCENT);
//wx967daebe835fbeac是你在微信开发平台注册应用的AppID,这里需要替换成你注册的AppID
StringappID="wxfc7bdd52daa288f9";
//微信图文分享必须设置一个Url
StringcontentUrl="http://t.cn/zTXUNMu";
//添加微信平台,参数1为当前Activity,参数2为用户申请AppID,参数3为点击分享内容跳转到的目标url
UMWXHandlerwxHandler=config.supportWXPlatform(getActivity(),appID,
contentUrl);
//设置分享标题
wxHandler.setWXTitle("浪腾微博客户端不错");
//支持微信朋友圈
UMWXHandlercircleHandler=config.supportWXCirclePlatform(
getActivity(),appID,contentUrl);
circleHandler.setCircleTitle("浪腾微博客户端还不错..");
}
‘肆’ 一些Android开发中常用的第三方sdk
1、Share SDK官网 www.mob.com。免费集成注册短信验证码,友好的分享功能。
2、环信sdk。主要是集成,聊天相关sdk。
3、Ping++聚合支付。解决集成支付sdk。
4、友盟分享、统计。
5、网络统计
6、极光推送、个推推送
7、360加固服务
8、网络加固、统计服务
9、融云通讯---即时通讯
10、容联 云通讯
11、极速数据、阿凡达数据、聚合数据
‘伍’ 如何使用友盟 Cocos2d-x 分享组件实现 Android/iOS 分享功能
首先我简单介绍一下组件压缩包的组成
Cocos2dx
实现Cocos2d-x中跨平台分享功能,需拷贝到您项目的Classes文件夹中;
Platforms
原生的Android和iOS社会化组件SDK,需要您将库和资源拷贝到对应平台的项目中;
doc
组件的集成文档;
Umeng_Cocos2dx_Demo_V1.0
Android部分的demo文件,可以安装在手机上看一下简单的分享效果和样式
Cocos2d-x虽然是一个跨平台的引擎,但是对于Android和IOS平台来说,具体的集成方式还是有一定的区别,这里分别介绍Android和IOS平台集成中不同的地方,然后再集中介绍跨平台通用的部分。
Android平台集成步骤:
步骤一:
下载Cocos2d-x组件(下载地址) 并且将jar包添加到build path 路径下,将res资源文件夹加入到你工程对应资源文件下。将Platforms/Android/controller目录下的com文件夹拷贝到您的Cocos2d-x项目Android平台的src目录下,并且在jni/Android.mk中的LOCAL_SRC_FILES下添加如下配置 (注意格式,否则会编译出错) :
../../Classes/Cocos2dx/Android/CCUMSocialController.cpp \
../../Classes/Cocos2dx/ShareButton/UMShareButton.cpp \
../../Classes/Cocos2dx/Common/CCUMSocialSDK.cpp
步骤二:
在Cocos2dxActivity子类的onCreate方法下添加如下代码,用来完成初始化步骤
// this为Cocos2dxActivity类型, 参数2为描述符,可随意修改.
CCUMSocialController.initSocialSDK(this, "com.umeng.social.share");
步骤三:
在代码中覆写Cocos2dxActivity子类的onActivityResult方法,用来实现回调方法。在onActivityResult添加如下代码 :
// 授权回调
CCUMSocialController.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
iOS平台集成步骤:
步骤一:
解压SDK压缩包,将Platforms/iOS文件夹和Cocos2dx文件夹拖入工程目录,并删除Cocos2dx/Android文件夹,添加后应该是这个效果:
步骤二:
添加系统需要的framework
Security.framework //用于系统加密处理
libiconv.dylib //QQ互联的库文件
SystemConfiguration.framework //QQ互联需要的framework
CoreGraphics.framework //QQ互联需要的framework
Social.framework //分享组件需要的framework,如果不使用twitter则不需要
libsqlite3.dylib //QQ互联需要的framework
libstdc++.dylib //C++的库文件
CoreTelephony.framework //QQ互联需要的framework
libz.dylib //QQ互联需要的framework
Accounts.framework //系统需要的framework,如果不使用twitter则不需要
步骤三:
实现系统的回调方法,在Xcode工程中的ios文件夹下的AppController.mm文件中加入下面的代码:
#import "UMSocial.h"
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [UMSocialSnsService handleOpenURL:url];
}
完成了上述准备工作之后,就可以开始正式的分享步骤了,友盟提供了多种分享样式,有精力的开发者可以使用底层接口,可以完全自由定制分享界面和样式,不过相信大部分开发者们使用第三方插件的初衷都是为了节省精力,所以这里就只介绍使用默认分享界面的方法,有更多需求的开发者们可以自己探索自定义界面接口部分。
步骤一:加入系统需要的头文件
// 授权回调
#include "Cocos2dx/Common/CCUMSocialSDK.h"
#include "Cocos2dx/ShareButton/UMShareButton.h"
// 使用友盟命令空间
USING_NS_UM_SOCIAL;
// ...... 代码省略
// HelloWorld为cocos2d::CCLayer的子类
bool HelloWorld::init()
{
//////////////////////////////
// 1. super init first
if ( !CCLayer::init() )
{
return false;
}
}
步骤二:分享按钮的创建
// 创建分享按钮, 参数1为按钮正常情况下的图片, 参数2为按钮选中时的图片,参数3为友盟appkey, 参数4为分享回调
UMShareButton *shareButton = UMShareButton::create("shareNormal.png","shareSelected.png", "你的友盟appkey", share_selector(shareCallback)) ;
步骤三:设置分享平台及内容
// 显示在友盟分享面板上的平台
vector
* platforms = new vector
();
platforms->push_back(SINA);
platforms->push_back(RENREN) ;
platforms->push_back(DOUBAN) ;
platforms->push_back(QZONE) ;
platforms->push_back(QQ) ;
// 设置友盟分享面板上显示的平台
shareButton->setPlatforms(platforms);
// 设置文本分享内容
shareButton->setShareContent("umeng social Cocos2d-x sdk.") ;
// 设置要分享的图片, 图片支持本地图片和url图片, 但是url图片必须以http://或者https://开头
shareButton->setShareImage("/sdcard/header.jpeg") ;
// 设置按钮的位置
shareButton->setPosition(ccp(150, 180));
// 然后开发者需要将该按钮添加到游戏场景中
CCMenu* pMenu = CCMenu::create(shareButton, NULL);
pMenu->setPosition(CCPointZero);
this->addChild(pMenu, 1);
// ********************** 设置平台信息 ***************************
// CCUMSocialSDK *sdk = shareButton->getSocialSDK();
// sdk->setQQAppIdAndAppKey("设置QQ的app id", "appkey");
// sdk->setWeiXinAppId("设置微信和朋友圈的app id");
// sdk->setYiXinAppKey("设置易信和易信朋友圈的app id");
// sdk->setLaiwangAppInfo("设置来往和来往动态的app id",
// "设置来往和来往动态的app key", "我的应用名");
// sdk->setFacebookAppId("你的facebook appid");
// 设置用户点击一条图文分享时用户跳转到的目标页面, 一般为app主页或者下载页面
// sdk->setTargetUrl(" ");
// 打开或者关闭log
// sdk->setLogEnable(true) ;
// ********************** END ***************************
集成到这一步就完成了,如果没有异常,应该会出现下面的界面,这说明你已经成功实现了集成工作。
‘陆’ ios 友盟三方分享 sdk需要注意什么
//需要引入框架
// 1. SystemConfiguration.framework
// 2. CoreGraphics.framework
// 3. libsqlite3.dylib
// 4. CoreTelephony.framework
// 5. libstdc++.dylib,
// 6. libz.dylib
//下载最新的SDK,http://dev.umeng.com/social/ios/sdk-download
//将UMSocial_Sdk-x.x.x的文件夹拖入工程目录下
// libUMSocial_Sdk-x.x.x.alibUMSocial_Sdk_comment_3.0.a库文件
// Header头文字
// SocialSDKXib xib文件
// en.Iproj, zh-Hans.Iproj英文和中文语言文件
// frameworks使用的第三方SDK,里面的Wechat,TencentOperAPI,TencentWeiboSSO,分别代表微信、手机QQ和腾讯微博SDK
//设置友盟分享
[UMSocialDatasetAppKey:@"52b13dc556240b55870e7148"];
//设置手机QQ的使用
[UMSocialConfigsetQQAppId:@"100424468"url:nilimportClasses:@[[QQApiInterfaceclass], [TencentOAuthclass]]];
//设置微信功能
[UMSocialConfigsetWXAppId:@"wx34bd7147c4d8ad5a"url:nil];
#pragma mark使用第三方登录需要重写下面两个方法
- (void)applicationDidBecomeActive:(UIApplication*)application
{
//登录需要编写
[];
}
- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation
{
return[:urlwxApiDelegate:nil];
}
#pragma mark直接分享
- (IBAction)share:(id)sender
{
//设置分享内容与分享平台
//弹出UIActivityViewController样式的列表
[:selfappKey:NilshareText:@"要分享的内容"shareImage:nilshareToSnsNames:@[UMShareToQzone,UMShareToSina,UMShareToTencent,UMShareToRenren, UMShareToSms,UMShareToEmail,UMShareToFacebook,UMShareToTwitter,UMShareToWechatSession,UMShareToWechatTimeline, UMShareToQQ]delegate:nil];
}
基本的分享如上边代码所示,但是iOS9 要注意网路http的问题
‘柒’ Android推送用海外哪家的SDK比较好
对于Android推送第三方,一直都在用Umeng,而且也给友盟写过一两个帖子(包含第三方登录),对于友盟开放出来的接口还是比较好用的。也有用过极光推送。对于这两个国内第三方推送,基础推送服务几乎是不产生任何费用的貌似。国外的没有使用过,但是基本跟国内差不多,而且鉴于国外的版权问题会更甚,所以收费可能会更高的吧。什么自己写个轮播推送,太Low,效率或者性能方面很差;或者团队开发自己的推送服务,如果研发方向不是推送或第三方服务的话,就不要浪费时间了。