EasySocial 1.0.0

EasySocial 1.0.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布日期最新版本发布日期2015年4月

PJ Engineering and Business Solutions Pty. Ltd. 维护。



  • PJ Engineering and Business Solutions Pty. Ltd.

EasySocial iOS Library for Twitter and Facebook

这个库允许您的应用在不了解相关 SDK 的情况下使用 Twitter 和 Facebook。使用非常简单,设计优雅。这会为您节省时间。

许多其他库过于复杂,并提供您不需要的功能。包含的示例项目演示了提供的许多功能。

EasySocial 只做以下这些事情

Twitter

  • 发送纯文本推文
  • 通过 URL 或 UIImage/NSData 发送带图片的推文
  • 从用户的个人时间线获取数据

Facebook

  • 完整的 Facebook Connect(登录/登出和自动登录)
  • 获取用户信息(objectID,名称等...)
  • 在用户的时间线中分享和发布消息

安装

第一部分

  1. Social.framework 添加到您的项目中
  2. Accounts.framework 添加到您的项目中
  3. EasySocial 文件夹拖动到您的项目中(确保检查 复制项目到目标分组文件夹
  4. 在 XCode 中打开 <您的项目名称>-Prefix.pch 文件,位于 Supporting Files 文件夹中。对于 XCode 6,您需要从头创建一个 pch 文件(链接到解决方案)
    • 加到末尾
//Now you do not need to include those headers anywhere else in your project.
#import "EasyFacebook.h"
#import "EasyTwitter.h"

第二部分

  1. 下载 并将 FacebookSDK.framework 添加到您的项目中。
  2. 将您的应用注册到 Facebook 以获取 App ID
    • 请确保在 XCode 中为您的高速应用程序提供的 Bundle ID 与您在 Facebook 中注册的相匹配
    • 请确保您在 Facebook 中启用了 "单一登录"
    • 配置 <您的项目名称>-Info.plist 文件,通过插入 FacebookAppIDFacebookDisplayNameURL 类型
    • 将您的自己的 Facebook 账户注册为 开发者 账户。这样您可以在开发过程中测试您的应用程序。在生产中,Facebook 必须批准您的应用程序以使用一些功能
  3. 在您的项目中的 AppDelegate.m 文件中包含
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    BOOL wasHandled1 = [EasyFacebook handleOpenURL:url sourceApplication:sourceApplication];
//  BOOL wasHandled2 = [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation];
//  BOOL wasHandled3 = [TumblrAPI handleURL:url];

    return wasHandled1;
//  return (wasHandled1 || wasHandled2 || wasHandled3);

}

EasyTwitter

方法

在您可以使用EasyTwitter之前,您必须实例化EasyTwitter类。

+ (EasyTwitter *)sharedEasyTwitterClient

该类是单例类,这意味着只有一个实例被创建。在实际应用中,该类会自动实例化,而无需您的任何操作。您可以通过:[EasyTwitter sharedEasyTwitterClient].XXX[[EasyTwitter sharedEasyTwitterClient] XXX].来使用该类。

方法 - 请求权限和设置账号

在您的应用程序可以使用Twitter之前,用户必须授予您的应用程序权限。

- (void)requestPermissionForAppToUseTwitterSuccess:(void(^)(BOOL granted, BOOL accountsFound, NSArray *accounts))success failure:(void(^)(NSError *error))failure

BOOL granted将指出用户是否已授予权限。如果用户没有授予权限,他们必须前往iOS内置的设置应用 -> 隐私 -> Twitter,在将来授予此权限。

BOOL accountsFound将指出是否找到了任何系统存储的Twitter账号(当granted==YES时)。如果没有找到,请提醒用户在设置应用 -> Twitter中保存他们的Twitter凭证。

NSArray *accounts将包含ACAccount对象。这些对象表示找到的Twitter账号。您可以遍历所有ACAccount对象,以选择想要用于发送推文的Twitter账号。

  • ACAccount包含两个有用的属性
    • .username(类型:字符串,例如finkd
    • .accountDescription(类型:字符串,例如@finkd

一旦您找到了所需的账号,即可设置它。

//In practice, set it to the required account. This is the default setting automatically set.
[EasyTwitter sharedEasyTwitterClient].account = [accounts firstObject];

方法 - 发送推文

推文是(最大长度为140字符的)消息,通过Twitter宇宙传播到其他Twitter用户。可以在消息中嵌入URL链接。它们将被自动检测并压缩以节省字符。还可以附加图片。所有图片都将被上传到Twitter的服务器。

//Plain Tweet
- (void)sendTweetWithMessage:(NSString *) message twitterResponse:(void(^)(id responseJSON, NSDictionary *JSONError, NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error))response failure:(void(^)(EasyTwitterIssues issue))failure
//Tweet with an image in *NSData format
- (void)sendTweetWithMessage:(NSString *) message image:(NSData *) image mimeType:(NSString *) mimeType requestShowLoadScreen:(BOOL) show twitterResponse:(void(^)(id responseJSON, NSDictionary *JSONError, NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error))response failure:(void(^)(EasyTwitterIssues issue))failure
//Tweet with an image referred to by a URL
- (void)sendTweetWithMessage:(NSString *) message imageURL:(NSURL *) imageURL twitterResponse:(void(^)(id responseJSON, NSDictionary *JSONError, NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error))response failure:(void(^)(EasyTwitterIssues issue))failure

(NSString *) message是要推文的消息

(NSData *) image指的是一张图片。如果您有一个UIImage对象,必须使用UIImageJPEGRepresentation()UIImagePNGRepresentation().将其转换为NSData对象。

(NSString *) mimeType指的是图片的Mime类型。它应该是image/png,image/jpeg,image/gif。如果未指定,则默认为image/png

(NSURL *) imageURL指的是图片文件的URL地址。它的Mime类型将通过文件的扩展名来猜测。

(BOOL) show是一个私有参数。始终将其设置为YES。

NSDictionary *JSONError是来自Twitter的REST API的响应的一部分。如果JSONError == nil,则推文已成功发布。如果它不是nil,则表示存在问题。

可以通过读取错误代码错误消息来确定问题。

//pseudo code
int errorCode = [[JSONError objectForKey:@"code"] intValue]; //JSON error code as opposed to HTTP error code
NSString *errorMessage = [JSONError objectForKey:@"message"];

常见错误代码:

  • 187表示重复推文。
  • 186表示推文太长(超过140个字符)。

EasyTwitterIssues issuefailure块返回。它表示在调用Twitter的REST API之前的错误。

如果issue == EasyTwitterNoAccountSet,则表示您尝试发送推文而没有设置Twitter账号。

方法 - 时间线

用户的 home-timeline 代表最新的推文和转推。请注意,home-timelineuser-timeline 不同。

- (void)loadTimelineWithCount:(int) count completion:(void (^)(NSArray *data, NSError *error))completion

(int) count 表示您希望从 home-timeline 返回的最新条目数量。最大值是 200。

NSArray *data 将包含代表时间线条目的 NSDictionary 对象。最新条目在 index==0。在开发过程中,您可以使用以下命令查看每个条目的内容:NSLog(@"data: %@", data)

最后,您可以按以下方式提取所需数据

//pseudo code
cell.textLabel.text = [data[row] objectForKey:@"text"]; //Main contents of item
cell.detailTextLabel.text = [[data[row] objectForKey:@"user"] objectForKey:@"""screen_name"""]; //Screen name of owner of item

通知

EasyTwitterPermissionGrantedNotification - 当用户授权访问系统存储的 Twitter 账户时发布。这并不表示找到了任何 Twitter 账户。

EasyTwitterAccountSetNotification - 当您将 ACAccount 对象设置为用于推文的 Twitter 账户时发布。当默认 Twitter 账户自动设置(无需您采取任何行动)时也会发布此通知。

EasyTwitterTweetSentNotification - 当一条推文成功发送时发布。通常,更有用的是在 sendTweetWithMessage: 方法的 response 回调块中监控 NSDictionary *JSONError 参数。空的错误响应表示成功发送推文。

EasyTwitterDelegate

协议中规定的两种方法都是 可选的。 您必须适当地设置 delegate 属性来接收协议。实现它们可能很有用,可以参考附带的示例项目。

showLoadingScreen: 在可能耗时较长的活动开始之前调用。hideLoadingScreen: 在耗时的活动完成后调用。

预期通过 UI 元素向用户显示后台活动正在进行。

  • requestPermissionForAppToUseTwitterSuccess:failure 前后
  • sendTweetWithMessage:image:mimeType:requestShowLoadScreen:twitterResponse:failure
  • sendTweetWithMessage:imageURL:twitterResponse:failure
  • sendTweetWithMessage:twitterResponse:failure
  • loadTimelineWithCount:completion

EasyFacebook

方法

在您可以使用 EasyFacebook 之前,必须实例化 EasyFacebook 类。

+ (EasyFacebook *)sharedEasyFacebookClient

该类是一个单例类,这意味着 创建一个实例。实际上,类会自动实例化,而无需您采取任何行动。你可以使用以下方式使用该类:[EasyFacebook sharedEasyFacebookClient].XXX[[EasyFacebook sharedEasyFacebookClient] XXX].

方法 - 登录 & 登出

在与 FacebookSDK 交互之前,您必须有一个登录的用户。

- (void)openSession  //For logging in
- (void)closeSession //For logging out
- (BOOL)isLoggedIn   //For checking logged in status

通过调用 openSession 方法,用户将经历标准的登录过程。这通常涉及打开官方的 Facebook 应用(如果已安装)。否则,将打开 Safari 浏览器。用户将被要求授权您的应用程序访问他们的详细信息。一旦批准,任何未来的对 openSession 的调用都将短暂打开 Facebook 应用,但将立即退回到您的应用程序 - 因为用户之前已经批准过(假设批准不会在之后被撤销)。

closeSession 方法将立即使用户登出。

(BOOL)isLoggedIn 方法将返回用户当前是否登录或登出。

当用户登录您的应用并在之后退出时,通常会本地保存缓存的令牌。当您的应用再次打开时,用户通常会无需再次登录。这是自动登录功能的一部分。

出于安全原因,如果您想关闭自动登录行为,您可以监听UIApplicationWillTerminateNotification并调用closeSession以使用户登出。

当用户正在登录时,FacebookSDK需要请求初始权限。默认权限有:

如果您想修改请求的权限,在调用openSession之前可以设置readPermissions:

//Set the readPermissions to what ever you want
[EasyFacebook sharedEasyFacebookClient].readPermissions = @[@"public_profile", @"email", @"user_friends"];

阅读下面的通知部分,如果您想了解可用的状态变化。

方法 - 获取用户基本信息

用户登录后,会自动调用获取用户基本信息的方法。但是,如果您需要按需获取最新的信息,则可以调用此方法。

- (void)fetchUserInformation

信息到达后,会发布EasyFacebookUserInfoFetchedNotification通知。一旦发布,您可以使用以下属性提取最新细节

方法 - 发布权限

发布到时间线需要publish_actions权限。一旦您的应用准备进入生产环境,您还需要Facebook的审批。

- (BOOL)isPublishPermissionsAvailableQuickCheck
- (void)isPublishPermissionsAvailableFullCheck:(void(^)(BOOL result, NSError *error))responseHandler
- (void)requestPublishPermissions:(void(^)(BOOL granted, NSError *error))responseHandler

(BOOL)isPublishPermissionsAvailableQuickCheck检查当前access token是否授予了publish_actions权限。由于权限可能在access token颁发后更改,所以准确性为99%。由于它没有进行任何REST API调用,所以该方法将立即返回。

(void)isPublishPermissionsAvailableFullCheck将对publish_actions权限执行100%准确的检查。它将进行一次REST API调用,并返回一个BOOL result响应。如果result==YES,则发布权限可用。

如果发布权限不可用,您必须通过调用(void)requestPublishPermissions方法请求它。当granted==YES时,表示用户已经授权。

方法 - 发布内容

要发布和分享内容,需要publish_actions权限。通过调用下面的publishStoryWithParams:completion:方法,它将自动调用requestPublishPermissions:方法。

- (void)publishStoryWithParams:(NSDictionary *)params completion:(void(^)(BOOL success, NSError *error))completion

(NSDictionary *)params可以包含这些参数

  • 链接 - 我们想要分享的URL
  • 名称 - 一个标题
  • 简述 - 一个副标题
  • 图片 - 与帖子关联的缩略图的URL
  • 描述 - 描述链接内容的文本片段
  • 消息 - 主要消息显示在所有内容之上

BOOL success 将是 completion 块中的响应。如果 success==YES,则分享帖子成功。

例如

NSDictionary *params = @{@"link" : @"http://www.google.com",
                         @"name" : @"Google",
                         @"caption" : @"#1 search engine",
                         @"picture" : @"https://www.google.com/images/srpr/logo11w.png",
                         @"description" : @"Home page Logo",
                         @"message" : @"hello"
                        };

输出将是

Screen shot of a sample Share Post

通知

EasyFacebookLoggedInNotification - 当用户成功登录时发布。在自动登录后也会发布此通知。

EasyFacebookLoggedOutNotification - 当用户主动退出或因意外原因退出时发布。

EasyFacebookUserInfoFetchedNotification - 当用户的基本信息可用时发布。这将在用户登录后不久自动发生,或会在显式调用 fetchUserInformation 方法后发生。请参见上面关于可用的基本信息的信息。

EasyFacebookUserCancelledLoginNotification - 当用户被给予登录机会但选择取消进程时发布。用户通常会被带到应用外的官方Facebook应用以登录。如果没有安装应用,则会使用带有网站中登录对话框的Safari浏览器打开。

EasyFacebookPublishPermissionGrantedNotification - 当用户授予应用在他们的时间轴上发布权限时发布。

EasyFacebookPublishPermissionDeclinedNotification - 当用户拒绝授予应用在他们的时间轴上发布权限时发布。

EasyFacebookStoryPublishedNotification - 当尝试在用户的时间轴上成功发布时发布。

EasyFacebookDelegate

协议中规定的两种方法都是 可选的。 您必须适当地设置 delegate 属性来接收协议。实现它们可能很有用,可以参考附带的示例项目。

showLoadingScreen: 在可能耗时较长的活动开始之前调用。hideLoadingScreen: 在耗时的活动完成后调用。

预期通过 UI 元素向用户显示后台活动正在进行。

  • publishStoryWithParams:completion

诊断

@property BOOL preventAppShutDown - iOS 8集成了不同的内存管理策略。如果在用户作为登录过程的一部分被带到Facebook应用后,您的应用被iOS终止,请将此属性设置为 YES

@property BOOL facebookLoggingBehaviourOn - 用于诊断目的,如果您想让FacebookSDK在后台操作的详细情况(在调试窗口中)记录下来,请将此属性设置为 YES

最终备注

如果您觉得这个库很有用,请在其github上 Star。请随意fork或提供pull requests。任何错误报告都将受到热烈欢迎。