| 测试已测试 | ✗ |
| 语言语言 | Obj-CObjective C |
| 许可证 | MIT |
| 发布日期最新版本发布日期 | 2015年4月 |
由 PJ Engineering and Business Solutions Pty. Ltd. 维护。
这个库允许您的应用在不了解相关 SDK 的情况下使用 Twitter 和 Facebook。使用非常简单,设计优雅。这会为您节省时间。
许多其他库过于复杂,并提供您不需要的功能。包含的示例项目演示了提供的许多功能。
EasySocial 只做以下这些事情
Social.framework 添加到您的项目中Accounts.framework 添加到您的项目中EasySocial 文件夹拖动到您的项目中(确保检查 复制项目到目标分组文件夹)<您的项目名称>-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"FacebookSDK.framework 添加到您的项目中。Bundle ID 与您在 Facebook 中注册的相匹配"单一登录"<您的项目名称>-Info.plist 文件,通过插入 FacebookAppID、FacebookDisplayName 和 URL 类型 键开发者 账户。这样您可以在开发过程中测试您的应用程序。在生产中,Facebook 必须批准您的应用程序以使用一些功能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 *)sharedEasyTwitterClient该类是单例类,这意味着只有一个实例被创建。在实际应用中,该类会自动实例化,而无需您的任何操作。您可以通过:[EasyTwitter sharedEasyTwitterClient].XXX或[[EasyTwitter sharedEasyTwitterClient] XXX].来使用该类。
在您的应用程序可以使用Twitter之前,用户必须授予您的应用程序权限。
- (void)requestPermissionForAppToUseTwitterSuccess:(void(^)(BOOL granted, BOOL accountsFound, NSArray *accounts))success failure:(void(^)(NSError *error))failureBOOL granted将指出用户是否已授予权限。如果用户没有授予权限,他们必须前往iOS内置的设置应用 -> 隐私 -> Twitter,在将来授予此权限。
BOOL accountsFound将指出是否找到了任何系统存储的Twitter账号(当granted==YES时)。如果没有找到,请提醒用户在设置应用 -> Twitter中保存他们的Twitter凭证。
NSArray *accounts将包含ACAccount对象。这些对象表示找到的Twitter账号。您可以遍历所有ACAccount对象,以选择想要用于发送推文的Twitter账号。
ACAccount包含两个有用的属性一旦您找到了所需的账号,即可设置它。
//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"];EasyTwitterIssues issue由failure块返回。它表示在调用Twitter的REST API之前的错误。
如果issue == EasyTwitterNoAccountSet,则表示您尝试发送推文而没有设置Twitter账号。
用户的 home-timeline 代表最新的推文和转推。请注意,home-timeline 与 user-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 itemEasyTwitterPermissionGrantedNotification - 当用户授权访问系统存储的 Twitter 账户时发布。这并不表示找到了任何 Twitter 账户。
EasyTwitterAccountSetNotification - 当您将 ACAccount 对象设置为用于推文的 Twitter 账户时发布。当默认 Twitter 账户自动设置(无需您采取任何行动)时也会发布此通知。
EasyTwitterTweetSentNotification - 当一条推文成功发送时发布。通常,更有用的是在 sendTweetWithMessage: 方法的 response 回调块中监控 NSDictionary *JSONError 参数。空的错误响应表示成功发送推文。
协议中规定的两种方法都是 可选的。 您必须适当地设置 delegate 属性来接收协议。实现它们可能很有用,可以参考附带的示例项目。
showLoadingScreen: 在可能耗时较长的活动开始之前调用。hideLoadingScreen: 在耗时的活动完成后调用。
预期通过 UI 元素向用户显示后台活动正在进行。
在
requestPermissionForAppToUseTwitterSuccess:failure 前后sendTweetWithMessage:image:mimeType:requestShowLoadScreen:twitterResponse:failuresendTweetWithMessage:imageURL:twitterResponse:failuresendTweetWithMessage:twitterResponse:failureloadTimelineWithCount:completion在您可以使用 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通知。一旦发布,您可以使用以下属性提取最新细节
@property NSString *UserEmail - 仅当请求了email权限时可用。默认情况下,已经请求了。@property NSString *UserFirstName@property NSString *UserGender@property NSString *UserObjectID - 通常指代为id(用户唯一 - 存储在数据库中)@property NSString *UserLastName@property NSString *UserLink@property NSString *UserLocale@property NSString *UserName@property NSString *UserTimeZone@property NSString *UserVerified发布到时间线需要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可以包含这些参数
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"
};输出将是
EasyFacebookLoggedInNotification - 当用户成功登录时发布。在自动登录后也会发布此通知。
EasyFacebookLoggedOutNotification - 当用户主动退出或因意外原因退出时发布。
EasyFacebookUserInfoFetchedNotification - 当用户的基本信息可用时发布。这将在用户登录后不久自动发生,或会在显式调用 fetchUserInformation 方法后发生。请参见上面关于可用的基本信息的信息。
EasyFacebookUserCancelledLoginNotification - 当用户被给予登录机会但选择取消进程时发布。用户通常会被带到应用外的官方Facebook应用以登录。如果没有安装应用,则会使用带有网站中登录对话框的Safari浏览器打开。
EasyFacebookPublishPermissionGrantedNotification - 当用户授予应用在他们的时间轴上发布权限时发布。
EasyFacebookPublishPermissionDeclinedNotification - 当用户拒绝授予应用在他们的时间轴上发布权限时发布。
EasyFacebookStoryPublishedNotification - 当尝试在用户的时间轴上成功发布时发布。
协议中规定的两种方法都是 可选的。 您必须适当地设置 delegate 属性来接收协议。实现它们可能很有用,可以参考附带的示例项目。
showLoadingScreen: 在可能耗时较长的活动开始之前调用。hideLoadingScreen: 在耗时的活动完成后调用。
预期通过 UI 元素向用户显示后台活动正在进行。
在
publishStoryWithParams:completion@property BOOL preventAppShutDown - iOS 8集成了不同的内存管理策略。如果在用户作为登录过程的一部分被带到Facebook应用后,您的应用被iOS终止,请将此属性设置为 YES。
@property BOOL facebookLoggingBehaviourOn - 用于诊断目的,如果您想让FacebookSDK在后台操作的详细情况(在调试窗口中)记录下来,请将此属性设置为 YES。
如果您觉得这个库很有用,请在其github上 Star。请随意fork或提供pull requests。任何错误报告都将受到热烈欢迎。