如果觉得我写的还不错,请关注我的新浪微博@杨浩宇-小橘爷,最新文章即时推送~
原生分享(一):微信分享之搭建分享环境
原生分享(二):微信分享之使用分享
微博分享
书接上文,前两篇博客我们介绍了如何使用微信的原生分享。但我还是那句话,我写了原生的分享,但大家在做项目的时候千万不要直接上原生,一定要用第三方!!!不然受苦受难的可是自己~
让你的应用在微博开放平台上运营,只需要通过简单的六个步骤:
成为开发者&创建应用
这一部分涉及较少的技术性问题,请大家上新手指南进行查看。
其中还是有几个需要注意的点:
- 设定授权回调:请在“我的应用 - 应用信息 - 高级信息”中填写您的应用回调 ,这样才能使 OAuth2.0 授权正常进行 。如果您的APPSECRET发生泄露,您也可以通过该页面中的重置按钮对其重置。注意: iOS 应用推荐使用默认授权回调页!地址为:https://api.weibo.com/oauth2/default.html。
- 设定 Apple ID 和 Bundle ID:请在“我的应用 - 应用信息 - 基本信息”中填写您的 Apple ID 和 Bundle ID,这样您的应用才能正常使用微博 iOS SDK 授权和回调。(更改设置有延时,建议退出账号重新登录后再测试)。注: Apple ID 如果没有的话,先随意填写,当获取了合法的 Apple ID 之后请马上到这个页面修改为正式版本。Bundle ID 需要和工程设置保证一致。
设置工程回调 URL Types
如下图所示:其中 Identifier 应为自己的 SSO 授权回调地址,URL Scheme 则为 WB[APP KEY]。
添加 SDK 文件到工程
将从 GitHub 上下载的 libWeiboSDK 文件夹添加到工程,其中包含 WeiboSDK.h、WeiboUser.h、WBHttpRequest.h、WBHttpRequest+WeiboUser.h、WBHttpRequest+WeiboShare.h、WBHttpRequest+WeiboToken.h、WBSDKBasicButton.h、WBSDKRelationshipButton.h、WBSDKCommentButton.h、WeiboSDK+Statistics.h 这10个.h文件以及 libWeiboSDK.a 和 WeiboSDK.bundle,统共12个文件。
在工程中引入静态库之后,需要在编译时添加 –ObjC 编译选项,避免静态库中类加载不全造成程序崩溃。
方法:程序 Target->Buid Settings->Linking 下 OtherLinker Flags 项添加 -ObjC。
添加 Framework 文件到工程
在工程中修改 Other Linker Flags 后,需要修改编译步骤的链接库设置,避免链接阶段由于库的设置错误导致程序崩溃。
方法:程序 Target->Buid Phases->Link BinaryWith Libraries 下添加以下 Framework 到工程中。需要添加的 Frameworks 为:QuartzCore.framework、ImageIO.framework、SystemConfiguration.framework、Security.framework、CoreTelephony.framework、CoreText.framework、UIKit.framework、Foundation.framework、CoreGraphics.framework 、libz.dylib、libsqlite3.dylib
定义常用的常量
定义应用 SSO 登录或者 Oauth2.0 认证所需的几个常量。
AppKey:第三方应用申请的 AppKey, 来身份鉴证、显示来源等;
AppRedirectURL: 应用回调 ,在进行 Oauth2.0 登录认证时所使用 。对于 Mobile 客户端应用来说,是不存在 Server 的,故此处的应用回调地址只要与新浪微博开放平台->我的应用 ->应用信息-> 高级应用 ->授权设置->应用回调中的 url 地址保持一致就可以了,如下所示:
#define kAppKey @"2045436852"
#define kRedirectURI @"http://www.sina.com"
注册 AppKey (ClientID)
程序启动时,在代码中向微博终端注册你的 AppKey,如果初次集成微博 SDK,建议打开调试选项以便输出调试信息。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[WeiboSDK enableDebugMode:YES];
[WeiboSDK registerApp:kAppKey];
return YES;
}
重写 AppDelegate 的 handleOpenURL 和 openURL 方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [WeiboSDK handleOpenURL:url delegate:self];
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [WeiboSDK handleOpenURL:url delegate:self ];
}
至此,微博 SDK 的导入和初始化工作就都完成了~
- (void)shareButtonPressed
{
// 获取AppDelegate
AppDelegate myDelegate =(AppDelegate)[[UIApplication sharedApplication] delegate];
/**
第三方应用向微博客户端请求认证的消息结构
第三方应用向微博客户端申请认证时,需要调用[WeiboSDK sendRequest:]函数, 向微博客户端发送一个WBAuthorizeRequest的消息结构。
微博客户端处理完后会向第三方应用发送一个结构为 WBAuthorizeResponse 的处理结果。
*/
WBAuthorizeRequest *authRequest = [WBAuthorizeRequest request];
// 微博开放平台第三方应用授权回调页地址,默认为`http://`
authRequest.redirectURI = kRedirectURI;
// 微博开放平台第三方应用 scope,多个 scope 用逗号分隔
authRequest.scope = @"all";
// 第三方应用发送消息至微博客户端程序的消息结构体,其中 message 类型我会在下面放出
WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequest requestWithMessage:[self messageToShare] authInfo:authRequest access_token:myDelegate.wbtoken];
// 自定义信息字典,用于数据传输过程中存储相关的上下文环境数据
// 第三方应用给微博客户端程序发送 request 时,可以在 userInfo 中存储请求相关的信息。
request.userInfo = @{@"ShareMessageFrom": @"SendMessageToWeiboViewController",
@"Other_Info_1": [NSNumber numberWithInt:123],
@"Other_Info_2": @[@"obj1", @"obj2"],
@"Other_Info_3": @{@"key1": @"obj1", @"key2": @"obj2"}};
// 发送请求给微博客户端程序,并切换到微博
// 请求发送给微博客户端程序之后,微博客户端程序会进行相关的处理,处理完成之后一定会调用 [WeiboSDKDelegate didReceiveWeiboResponse:] 方法将处理结果返回给第三方应用
[WeiboSDK sendRequest:request];
}
文字类型的消息格式
// 微博客户端程序和第三方应用之间传递的消息结构
// 一个消息结构由三部分组成:文字、图片和多媒体数据。三部分内容中至少有一项不为空,图片和多媒体数据不能共存。
WBMessageObject *message = [WBMessageObject message];
message.text = NSLocalizedString(@"测试通过WeiboSDK发送文字到微博!", nil);
图片类型的消息格式
WBMessageObject *message = [WBMessageObject message];
// 消息中包含的图片数据对象
WBImageObject *image = [WBImageObject object];
// 图片真实数据内容
image.imageData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image_1" ofType:@"jpg"]];
// 消息的图片内容
message.imageObject = image;
网页类型的消息格式
WBMessageObject *message = [WBMessageObject message];
// 消息中包含的网页数据对象
WBWebpageObject *webpage = [WBWebpageObject object];
// 对象唯一ID,用于唯一标识一个多媒体内容
// 当第三方应用分享多媒体内容到微博时,应该将此参数设置为被分享的内容在自己的系统中的唯一标识
webpage.objectID = @"identifier1";
webpage.title = NSLocalizedString(@"分享网页标题", nil);
webpage.description = [NSString stringWithFormat:NSLocalizedString(@"分享网页内容简介-%.0f", nil), [[NSDate date] timeIntervalSince1970]];
// 多媒体内容缩略图
webpage.thumbnailData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image_2" ofType:@"jpg"]];
// 网页的url地址
webpage.webpageUrl = @"http://sina.cn?a=1";
// 消息的多媒体内容
message.mediaObject = webpage;
这就是微博分享的环境搭建和基本使用的全部内容了,捎带脚吐槽一句,微博的分享真难用啊,我就测试了几次就说我账号异常,我也是……