EasySocial iOS库用于Twitter和Facebook
这个库允许你的应用程序使用Twitter和Facebook,而无需深入了解相关的SDK。它非常易于使用且设计优雅。这将节省你的时间。
许多其他库过于复杂,并提供你在应用程序中不需要的功能。包含的示例项目演示了大部分提供的功能。
EasySocial只做这些事情:
- 发送纯推文
- 通过URL或UIImage/NSData发送带图片的推文
- 从用户的时间线获取数据
- 完整的Facebook连接(登录/登出和自动登录)
- 获取用户信息(objectID,名称等…)
- 在用户的时间线上分享和发布消息
安装
CocoaPods
pod ‘EasySocial’, ‘~> 1.0’
第一部分
- 将
Social.framework
添加到你的项目中 - 将
Accounts.framework
添加到你的项目中 - 将
EasySocial
文件夹拖入你的项目(确保你勾选了“复制项到目标组文件夹”) - 打开XCode中的
<Your Project Name>-Prefix.pch
文件。对于XCode 6,你需要从头开始创建一个pch
文件从零开始。- 添加到底部:
//现在你不需要在你的项目中其他地方包含这些头文件。
#import "EasyFacebook.h"
#import "EasyTwitter.h"
第二部分
- 下载并将
FacebookSDK.framework
添加到你的项目中。 - 用Facebook注册你的应用以获取App ID
- 确保你在XCode中给出的应用程序的
Bundle ID
与你在Facebook上注册的内容相匹配 - 确保你在Facebook中启用了“单点登录”
- 配置
<Your Project Name>-Info.plist
文件,插入FacebookAppID
,FacebookDisplayName
和URL类型
键 - 以开发者身份注册你自己的Facebook帐户。这样,你可以在开发过程中测试你的应用程序。在生产环境中,Facebook必须批准你的应用程序才能使用某些功能
- 确保你在XCode中给出的应用程序的
- 在你的项目的
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
对象以选择要发送推文的所需帐户。
ACAccount
包含两个有用的属性:- .username(类型:字符串,例如finkd)
- .accountDescription(类型:字符串,例如@finkd)
一旦发现所需的帐户,将其设置为。
//在实践中,将其设置为所需的帐户。这是自动设置的默认设置。
[EasyTwitter sharedEasyTwitterClient].account = [accounts firstObject];
发送推文
一条推文是一个最多140个字符的消息,通过Twittersphere传播给其他Twitter用户。URL链接可以嵌入在消息中。它们会自动检测并最小化以节省字符。还可以附加图片。所有图片都会上传到Twitter的服务器。
//普通推文
- (void)sendTweetWithMessage:(NSString *) message twitterResponse:(void(^)(id responseJSON, NSDictionary *JS= nil,` 推文成功发布。如果它不是nil,那么有问题。
问题可以通过阅读[**错误代码**](https://dev.twitter.com/overview/api/response-codes)和**错误消息**来确定。
```objective-c
//伪代码
int errorCode = [[JS [JS= EasyTwitterNoAccountSet,` 它意味着您尝试在没有设置Twitter帐户的情况下发送推文。
时间线
用户的最新推文和转发代表最近的时间线。应该注意的是,home-timeline
与user-timeline
不同。
- (void)loadTimelineWithCount:(int) count completion:(void (^)(NSArray *data, NSError *error))completion
(int) count
是指您希望从主页时间线返回的最近项目的数量。最大值为200。
NSArray *data
将包含表示时间线的NSDictionary
对象。最近的项目位于index==0
。在开发过程中,您可以使用以下内容观察每个项目的具体内容:
//伪代码
cell.textLabel.text = [data[row] objectForKey:@"text"]; //项目的主要内容
cell.detailTextLabel.text = [[data[row] objectForKey:@"user"] objectForKey:@"""screen_name"""]; //所有者的项目名称
通知
EasyTwitterPermissionGrantedNotification
- 当用户授权访问系统存储的Twitter帐户时发布。这并不意味着找到了任何Twitter帐户。
EasyTwitterAccountSetNotification
- 当您将ACAccount
对象设置为要从中发送推文的Twitter帐户时发布。此通知也会在自动设置默认Twitter帐户(无需您手动操作)时发布。
EasyTwitterTweetSentNotification
- 当成功发送推文时发布。通常,更有用的是在NSDictionary *JSONError
参数的响应回调块的sendTweetWithMessage:
方法中监视response
。一个nil
错误响应表示成功的推文。
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 //用于登录
- (void)closeSession //用于注销
- (BOOL)isLoggedIn //用于检查登录状态
通过调用openSession
方法,用户将经历标准的登录过程。这通常涉及到打开官方的Facebook应用程序(如果已安装)。否则,Safari浏览器将被打开。用户将被要求授予您的应用程序访问其详细信息的权限。一旦获得批准,任何将来对openSession
的调用都将短暂地打开Facebook应用程序,但几乎会立即转移到您的应用程序中 - 因为用户在过去已经批准了(只要后来没有撤销批准),提供批准不是后来撤销的。
closeSession
方法将立即注销用户。
(BOOL)isLoggedIn
方法将返回用户当前是否已登录或未登录。
如果用户登录并退出您的应用程序,通常会保存本地缓存的令牌。当您的应用程序再次打开时,用户通常不需要再次登录。这是自动登录功能的一部分。
出于安全原因,如果您想关闭自动登录行为,您可以监听UIApplicationWillTerminateNotification并在调用closeSession
时注销用户。
当用户正在登录时,FacebookSDK需要初始请求的权限。 默认权限包括:
如果您想在调用openSession
之前修改请求的权限,可以设置readPermissions:
//将readPermissions设置为所需的内容
[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
检查是否已授予publish_actions
权限给当前的access token
。由于权限可能在access token
发出后更改,或者用户可能通过Facebook网站外部的应用程序更改权限,因此此方法将立即返回,因为它不进行任何REST API调用。
(void)isPublishPermissionsAvailableFullCheck
将执行100%准确的检查以确定是否已授予publish_actions
权限。它将进行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
可以具有以下参数:
- link - 我们想要分享的url
- name - 标题
- caption - 子标题
- picture - 与帖子关联的缩略图的url
- description - 链接内容的文本摘要
- message - 主消息出现在所有其他内容之上
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浏览器将打开带有登录对话框的网站。如果应用程序未安装,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上给它一个 ⭐️。随时可以fork或提供pull requests。我们非常欢迎任何bug报告。