原生分享(三):微博分享

作者: 小橘爷 | 来源:发表于2016-03-27 09:34 被阅读2536次

如果觉得我写的还不错,请关注我的新浪微博@杨浩宇-小橘爷,最新文章即时推送~
原生分享(一):微信分享之搭建分享环境
原生分享(二):微信分享之使用分享

微博分享

书接上文,前两篇博客我们介绍了如何使用微信的原生分享。但我还是那句话,我写了原生的分享,但大家在做项目的时候千万不要直接上原生,一定要用第三方!!!不然受苦受难的可是自己~

让你的应用在微博开放平台上运营,只需要通过简单的六个步骤:

图1-1 六个步骤

成为开发者&创建应用

这一部分涉及较少的技术性问题,请大家上新手指南进行查看。

其中还是有几个需要注意的点:

  • 设定授权回调:请在“我的应用 - 应用信息 - 高级信息”中填写您的应用回调 ,这样才能使 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]。

图1-2 设置URL Types

添加 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个文件。


图1-3 添加SDK文件到工程

在工程中引入静态库之后,需要在编译时添加 –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

图1-4 添加FrameWork

定义常用的常量

定义应用 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;

这就是微博分享的环境搭建和基本使用的全部内容了,捎带脚吐槽一句,微博的分享真难用啊,我就测试了几次就说我账号异常,我也是……

相关文章

网友评论

  • 爆炸头的波波安:新浪小“菊”爷,新浪分享gif图搞过没
    小橘爷:@爆炸头的波波安 这么高端的我还并没有做过:hushed:
  • EKven:就是这个原生微博什么设置一定要跳出网页登陆?
    小橘爷:@机电小孩 这个是会判断是否装有客户端的吧,具体我也记不清了。
  • TyLee:求问有没有遇到加了webpageUrl但是不显示链接的情况?
    小橘爷:@TyLee :+1:🏻
    TyLee:@杨浩宇 已经解决,原因竟然是有个参数为nil导致。
    小橘爷:@TyLee 没有呢⋯⋯
  • 送你一叶扁舟:弱弱的问一句网页分享类型的消息掉不起来本地的app 图片文字分享的都能吊起来 这是什么原因??? 是不是新浪开发平台还要设置什么东西么????
    小橘爷:@送你一叶扁舟 我做的分享都是查看网页用的,如果想要吊起应用可能得h5做下拦截,如果手机有APP,跳转就是了~
  • f1cfeb3cb646:请问博主 知道那种网页加图片形式的微博分享怎么写吗
    小橘爷:@gougou1991 这种类型的还真没写过~
  • f1cfeb3cb646:博主 有没有遇到过 微博分享没有走回调方法的情况
    小橘爷:@gougou1991 如果是用第三方的分享就好好查一下文档,看看错误是什么原因的~如果你用的原生的分享⋯⋯那就换成第三方的~
    f1cfeb3cb646:感觉好坑 无数次在微博页面提示分享失败 已存入草稿箱 我也是醉了
    小橘爷:@gougou1991 并没有遇到过。
  • 73ee36bf2571:可以分享视频么,类似秒拍那种
    小橘爷:@我是哈哈 可能只有深度合作的才能分享出那种效果吧~
    73ee36bf2571:@杨浩宇 嗯,但是还是想试一下分享出来能有小咖秀那种效果
    小橘爷:@我是哈哈 分享的本质上都是网页,需要点进去看的。
  • AllenZYQ:特别是改成网页类型 或者其他什么的
    EKven:@AllenZYQ 这个原生微博怎么设置一定网页登陆
    AllenZYQ:@杨浩宇 哈哈
    小橘爷:@AllenZYQ 必须的,微博的分享真的很烂,而且我觉得导流效果远不如微信和QQ。
  • AllenZYQ:原生的就微博坑,真tm坑!

本文标题:原生分享(三):微博分享

本文链接:https://www.haomeiwen.com/subject/cviklttx.html