版本记录
版本号 | 时间 |
---|---|
V1.0 | 2018.04.05 |
前言
相信很多人用过友盟,包括友盟的第三方登录、分享以及统计。这里我们就分几个模块进行详细的说明 —— 移动统计
(U - App)
、网站统计(U - Web)
、消息推送(U - Push)
、社会化分享(U - Share)
、游戏统计(U - Game)
、互联网运营数据服务(Dplus)
- 多维度、一站式、精细化数据管理服务。感兴趣的可以看上面几篇。
1. 友盟集成(一) —— UShare模块之快速集成(一)
2. 友盟集成(二) —— UShare模块之快速集成(二)
3. 友盟集成(三) —— UShare模块之第三方登录(一)
4. 友盟集成(四) —— UShare模块之进阶说明之第三方平台SDK说明(一)
5. 友盟集成(五) —— UShare模块之进阶说明之分享到第三方平台(二)
6. 友盟集成(六) —— UShare模块之进阶说明之分享面板UI(三)
7. 友盟集成(七) —— UShare模块之进阶说明之自定义平台(四)
8. 友盟集成(八) —— UShare模块之进阶说明之U-Share API说明(五)
UShare常见问题
1. U-Share返回错误码
//平台的失败错误码
/**
* U-Share返回错误类型
*/
typedef NS_ENUM(NSInteger, UMSocialPlatformErrorType) {
UMSocialPlatformErrorType_Unknow = 2000, // 未知错误
UMSocialPlatformErrorType_NotSupport = 2001, // 不支持(url scheme 没配置,或者没有配置-ObjC, 或则SDK版本不支持或则客户端版本不支持)
UMSocialPlatformErrorType_AuthorizeFailed = 2002, // 授权失败
UMSocialPlatformErrorType_ShareFailed = 2003, // 分享失败
UMSocialPlatformErrorType_RequestForUserProfileFailed = 2004, // 请求用户信息失败
UMSocialPlatformErrorType_ShareDataNil = 2005, // 分享内容为空
UMSocialPlatformErrorType_ShareDataTypeIllegal = 2006, // 分享内容不支持
UMSocialPlatformErrorType_CheckUrlSchemaFail = 2007, // schemaurl fail
UMSocialPlatformErrorType_NotInstall = 2008, // 应用未安装
UMSocialPlatformErrorType_Cancel = 2009, // 取消操作
UMSocialPlatformErrorType_NotNetWork = 2010, // 网络异常
UMSocialPlatformErrorType_SourceError = 2011, // 第三方错误
UMSocialPlatformErrorType_ProtocolNotOverride = 2013, // 对应的 UMSocialPlatformProvider的方法没有实现
UMSocialPlatformErrorType_NotUsingHttps = 2014, // 没有用https的请求,@see UMSocialGlobal isUsingHttpsWhenShareContent
};
2. 集成SDK问题
用了U-Share v5.x版本,现在加入6.x编译链接报错
U-Share SDK 5.x和6.x版本不相兼容,v6.x是完全重构的一个版本,升级到6.x时请完全移除v5.x或更早版本。
分享面板很多平台没显示
这是U-Share SDK内部处理,对于模拟器以及在设备上未安装或不支持授权/分享的平台应用进行了隐藏,以增强分享体验及解决审核App时可能被拒的问题。
3. 授权/分享跳转与回调问题
授权或分享未跳到目标App
可能在工程中配置iOS9以上白名单缺少对应平台参数,参考配置SSO白名单。
failed for URL: ""weibosdk://"" - error:
类似还有微信、QQ等需要打开相应app的都会有这样的log,在模拟器上可能出现此log,因为没安装对应app,此条日志可以忽略。 而如果出现error: "This app is not allowed to query for scheme xxx",说明白名单没有配置,参考上一个问题。
在目标App授权或分享后未跳转回原App
未配置URL Types,参考添加URL Types。
授权或分享结束后未回调数据
检查系统回调函数,参考设置系统回调。
跳转收到UIKeyboardWillShow消息
在分享到第三方平台,如QQ、微信,在某些情况下可能会收到UIKeyboardWillShowNotification
消息,U-Share SDK内部并无此消息发出。 发生的情况可能在跳转到第三方平台编辑页面弹出键盘后或跳回App后收到,可参考以下两种方式解决:
- 在
viewDidDisappear
中移除此消息的注册。 - 用下列代码过滤非本控件触发的消息。
- (void)keyboardWillShowNotification:(NSNotification *)note
{
if (!myTextField.isFirstResponder) {
return;
}
// code
}
4. 苹果审核(ATS)及HTTPS
HTTP图片发送失败
由于ATS的原因,所有HTTP链接在SDK内都被禁止,并提示错误告知非https图片不可分享,请使用https图片,保证ATS环境下可以顺畅的进行分享操作。分享图片方式如下: 1. 分享图片仅适用本地图片加载,如UIImage或NSData数据传输。 2. 如需使用网络图片,确保URL为HTTPS图片链接,以便于U-Share SDK下载并进行分享,否则会分享失败。
关于ATS(审核时强制应用支持HTTPS)的问答
问:友盟分享和第三方登录的SDK,现在要升级HTTPS,是否所有的都需要必须换成最新的sdk才可以?如果不升级而用原来的SDK,可以设置吗?HTTPS协议与SDK的版本号有没有关系? 答:这可能是多数开发者的疑惑,ATS的支持需要本地SDK将访问地址由http调整为https前缀的链接才可以,无法设置,所以从U-Share 6.1开始已经支持全部HTTPS访问。 但目前有一个例外新浪微博的官方SDK还未全部支持ATS,在通过网页进行授权依然是HTTP请求导致页面加载失败,请关注官方U-Share iOS SDK后续会保持跟进。
上线的应用是否有影响
在AppStore的应用不会有影响,也不会下架。这个变化是针对新提交审核的,也就是说,只要更新应用,就需要支持ATS。在苹果执行ATS后友盟分享SDK4.x版和5.x版本分享是否可用
跟上面的问题一样,只要在线上的应用均不会受到影响。但如果需要更新应用提交审核,则需要更新SDK到6.1以上版本,即现在全新的U-Share SDK已支持ATS。微博SDK设置redirectURL为HTTP的,是否影响审核,以及安卓是否需要同步修改
官方建议修改为前缀是https的redirectURL,并且http和https前缀的redirectURL互相兼容,不会导致不匹配而授权失败的问题。由于微博后台的设置无需修改,安卓客户端也不会有影响。微信、新浪微博和QQ头像是HTTP URL
目前第三方平台返回的头像链接依然是HTTP地址,不过U-Share SDK已经做了兼容处理,升级到6.1.2以上版本SDK使用,开发者无需担心获取头像因为ATS的原因而失败。
5. 分享参数问题
网页类型发送失败
发送网页link card形式的分享,需要设置缩略图,如demo中的示例:
UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:@"分享标题" descr:@"分享内容描述" thumImage:[UIImage imageNamed:@"icon"]];
其中需要设定thumImage。
6. 分享面板UI
更新6.1后UI编译错误
由于6.1版开始更新了全新的分享面板,所以导入形式也略有改变
- 导入文件
##import "UMSocialUIManager.h"
改为
##import <UShareUI/UShareUI.h>
- 回调block
[UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMShareMenuSelectionView *shareSelectionView, UMSocialPlatformType platformType) {
}];
接口没变,回调参数调整为
[UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) {
}];
分享面板无法弹出
由于 1. 创建Xcode项目会默认添加Main.storyboard
作为Main Interface(General - Deployment Info)
,也就是项目的主Window。 2. 如果没使用Main.storyboard而又另外在AppDelegate中创建了UIWindow对象,如
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]
如果项目中同时出现Main Interface以及代码创建UIWindow会导致分享面板无法正常弹出,解决方法是移除其一即可。如果移除了Main.storyboard,需要clean工程后再重新运行。
7. 更新Cocoapods问题
找不到UMengUShare
如果通过Cocoapods集成U-Share SDK(Cocoapods集成)出现更新失败或查找失败,如:
Unable to find a pod with name matching 'UMengUShare/Social/Wechat'
原因可能是未更新Cocoapods库,使用pod update进行更新远端数据库,切记不要使用--no-repo-update参数,更新Cocoapods库时间较长,请耐心等待。
从4.x或5.x版本升级U-Share 6.0报错library not found for xxx
由于老版本通过cocoapods集成下载接入全量的平台,包括APOpenSDK、facebook、twitter等。在新版U-Share通过cocoapods集成可以灵活的单选平台,没有加入Podfile配置文件的不会下载。 可以到项目 - Build Setting - Other linker flag 查看是否有多余的库依赖,确认后删除即可。
cocoapods library not found for -lPods
新版cocoapods1.0
链接库名称为libPods-[target_name].a
,不再是libPods.a
,删除libPods.a即可。
报错"not used in any concrete target"
Cocoapods1.0版本语法问题,需改为
target '工程target名称' do
pod ‘cocoapods库名'
end
以上工程target名称需改为开发者工程内对应的target名。
通过cocoapods集成Linkedin领英
linkedin
会和Cocoapods
产生链接时冲突
duplicate symbol _OBJC_CLASS_$_PodsDummy_Pods
可将Pod中的PodsDummy_Pods
类名修改为_PodsDummy_Podsxx
8. QQ
分享网页类型失败source code 5
检查url中是否含有中文字符,将中文部分进行url转码后可正常分享。
9. 微博
微博授权页显示sso package error
微博SSO错误是项目的bundle id
和在微博平台bundle id设置的不一致导致的,必须保证字符完全匹配。
提示redirect_uri_mismatch
项目中设置的redirectURL
和授权Request传递的回调地址(WBAuthorizeRequest.redirectURI-微博后台设置)不一致导致的,必须保证字符完全匹配。 如
[[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Sina appKey:@"3921700954" appSecret:@"04b48b094faeb16683c32669824ebdad" redirectURL:@"http://sns.whalecloud.com/sina2/callback"];
以上redirectURL必须和微博后台设置一致。
弹出授权窗口后瞬间消失
两个可能 1. bundle id
不一致导致 2. 检查info.plist文件里有没添加加URL Types,在URL Schemes
里填上wb+APPKEY
。
授权后没有返回应用
检查info.plist
里设置的URL Scheme
是否正确,需要是wb+appkey
的形式。
未安装微博客户端分享音乐、视频的显示问题
目前微博分享不支持在未安装微博客户端时分享音乐、视频类型的内容。已安装客户端可在微博客户端编辑页正常显示,发送后显示状态可参考上面的微博 LinkCard问题。
微博(完整版)webview回调的崩溃
未安装新浪微博客户端时会弹出Webview进行登录和分享,之后会回调至以下函数:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
如果用户没有重载此函数的话,会导致微博SDK通过Webview的回调而崩溃。 开发者需重载此方法接受系统回调。
10. 支付宝
支付宝返回“-4”“鉴权失败”
检查bundle id是否和支付宝后台配置的bundle id一致。
后记
本篇主要讲述了UShare模块之UShare常见问题,感兴趣的给个赞或者关注~~~