近日接到需求,需要接入Line登录分享,当时一愣,Line是个什么东西,网上一查,才发现自己是多么的落后,竟然不知道Line,Line中文名是连我,是和Facebook、微信、QQ类似的社交。
既然有这个需求,那没办法,只能硬着头皮去搞了,之前接过FaceBook的登录分享邀请等,所以对国外的SDK接入感觉也不会太难,可是我错了,Line接入真的不是那么一帆风顺,很多坑
下载Line需要搞个国外的AppId,不然国内是搜索不到Line下载的
需要连接VPN下载登录
首先,进入Line开发者中心 Line官网 注册 拿到 Channel ID 和 Channel Secret
Line SDK下载位置:如下图:
进入下图位置,即 iOS Line接入开发文档
根据文档进行环境配置等,
注意事项:
注册监听时,根据文档会有问题,当客户端没有安装Line时会走web登录,所以需要添加一个多监听一个web登录回调:(这个坑了我两天,web登录一直没回调,后面自己去Line添加的库里面找,找到很多字段一个个监听,终于找到下面这个监听才能监听到web登录结果)
//只有添加了这个监听,在没安装Line的情况下,web登录才会有回调
[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(lineAdapterAuthorizationDidChange:) name:LineAdapterUserApprovalDidFinishNotification object:nil];
Line分享只能分享文字或者图片:(分享只有在安装Line的情况下才可用)
//是否有安装Line
- (BOOL)canShareToLine
{
return[[UIApplicationsharedApplication]canOpenURL:[NSURLURLWithString:@"line://"]];
}
//分享文字
- (void)shareText:(NSString*)text
{
if( [selfcanShareToLine] ) {
NSString*contentKey = (__bridgeNSString*)CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)text,
NULL,
(CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
NSString*contentType =@"text";
NSString*urlString = [NSStringstringWithFormat:@"line://msg/%@/%@",
contentType, contentKey];
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:urlString]];
}
}
//分享图片
- (void)shareImage:(NSString*)imageUrl
{
if( [selfcanShareToLine] ) {
UIPasteboard*pasteboard = [UIPasteboardpasteboardWithUniqueName];
NSString*pasteboardName = pasteboard.name;
NSURL*imageURL = [NSURLURLWithString:imageUrl];
[pasteboardsetData:UIImagePNGRepresentation([UIImageimageWithData:[NSDatadataWithContentsOfURL:imageURL]])forPasteboardType:@"public.png"];
NSString*contentType =@"image";
NSString*contentKey = (__bridgeNSString*)CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)pasteboardName,
NULL,
CFSTR(":/?=,!$&'()*+;[]@#"),
CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
NSString*urlString = [NSStringstringWithFormat:@"line://msg/%@/%@",
contentType, contentKey];
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:urlString]];
}
}
登录成功之后,获取Line用户信息:
- (void)tryApi
{
[[adaptergetLineApiClient]getMyProfileWithResultBlock:^(NSDictionary*aResult,NSError*aError)
{
if(aResult)
{
NSString*openId = aResult[@"mid"];//Line用户ID
NSString*nickName = aResult[@"displayName"];//Line用户昵称
NSString*imageUrl = aResult[@"pictureUrl"];//Line用户头像url
//在Line头像url后加上 @"/large" 代表取的是 200X200 的大图,加@“/small”代表取的是51X51的小图
NSString*image = [NSStringstringWithFormat:@"%@%@", imageUrl,@"/large"];
}
}