测试已测试 | ✗ |
语言语言 | 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))failure
BOOL 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 item
EasyTwitterPermissionGrantedNotification
- 当用户授权访问系统存储的 Twitter 账户时发布。这并不表示找到了任何 Twitter 账户。
EasyTwitterAccountSetNotification
- 当您将 ACAccount
对象设置为用于推文的 Twitter 账户时发布。当默认 Twitter 账户自动设置(无需您采取任何行动)时也会发布此通知。
EasyTwitterTweetSentNotification
- 当一条推文成功发送时发布。通常,更有用的是在 sendTweetWithMessage:
方法的 response
回调块中监控 NSDictionary *JSONError
参数。空的错误响应表示成功发送推文。
协议中规定的两种方法都是 可选的。
您必须适当地设置 delegate
属性来接收协议。实现它们可能很有用,可以参考附带的示例项目。
showLoadingScreen:
在可能耗时较长的活动开始之前调用。hideLoadingScreen:
在耗时的活动完成后调用。
预期通过 UI 元素向用户显示后台活动正在进行。
在
requestPermissionForAppToUseTwitterSuccess:failure 前后
sendTweetWithMessage:image:mimeType:requestShowLoadScreen:twitterResponse:failure
sendTweetWithMessage:imageURL:twitterResponse:failure
sendTweetWithMessage:twitterResponse:failure
loadTimelineWithCount: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。任何错误报告都将受到热烈欢迎。