EasySocial iOS库用于Twitter和Facebook

这个库允许你的应用程序使用Twitter和Facebook,而无需深入了解相关的SDK。它非常易于使用且设计优雅。这将节省你的时间。

许多其他库过于复杂,并提供你在应用程序中不需要的功能。包含的示例项目演示了大部分提供的功能。

EasySocial只做这些事情:

Twitter

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

Facebook

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

安装

CocoaPods

pod ‘EasySocial’, ‘~> 1.0’

第一部分

  1. Social.framework添加到你的项目中
  2. Accounts.framework添加到你的项目中
  3. EasySocial文件夹拖入你的项目(确保你勾选了“复制项到目标组文件夹”)
  4. 打开XCode中的<Your Project Name>-Prefix.pch文件。对于XCode 6,你需要从头开始创建一个pch文件从零开始
    • 添加到底部:
  1. //现在你不需要在你的项目中其他地方包含这些头文件。
  2. #import "EasyFacebook.h"
  3. #import "EasyTwitter.h"

第二部分

  1. 下载FacebookSDK.framework添加到你的项目中。
  2. 用Facebook注册你的应用以获取App ID
    • 确保你在XCode中给出的应用程序的Bundle ID与你在Facebook上注册的内容相匹配
    • 确保你在Facebook中启用了“单点登录”
    • 配置<Your Project Name>-Info.plist文件,插入FacebookAppIDFacebookDisplayNameURL类型
    • 以开发者身份注册你自己的Facebook帐户。这样,你可以在开发过程中测试你的应用程序。在生产环境中,Facebook必须批准你的应用程序才能使用某些功能
  3. 在你的项目的AppDelegate.m文件中,包括:
  1. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
  2. {
  3. BOOL wasHandled1 = [EasyFacebook handleOpenURL:url sourceApplication:sourceApplication];
  4. // BOOL wasHandled2 = [GPPURLHandler handleURL:url sourceApplication:sourceApplication annotation:annotation];
  5. // BOOL wasHandled3 = [TumblrAPI handleURL:url];
  6. return wasHandled1;
  7. // return (wasHandled1 || wasHandled2 || wasHandled3);
  8. }

EasyTwitter

方法

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

  1. + (EasyTwitter *)sharedEasyTwitterClient

该类是一个单例类,意味着只创建了一个实例。在实践中,类会自动实例化,无需您手动操作。您可以使用以下方式使用类:[EasyTwitter sharedEasyTwitterClient].XXX[[EasyTwitter sharedEasyTwitterClient] XXX].

请求权限和设置帐户

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

  1. - (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

一旦发现所需的帐户,将其设置为。

  1. //在实践中,将其设置为所需的帐户。这是自动设置的默认设置。
  2. [EasyTwitter sharedEasyTwitterClient].account = [accounts firstObject];

发送推文

一条推文是一个最多140个字符的消息,通过Twittersphere传播给其他Twitter用户。URL链接可以嵌入在消息中。它们会自动检测并最小化以节省字符。还可以附加图片。所有图片都会上传到Twitter的服务器。

  1. //普通推文
  2. - (void)sendTweetWithMessage:(NSString *) message twitterResponse:(void(^)(id responseJSON, NSDictionary *JS= nil,` 推文成功发布。如果它不是nil,那么有问题。
  3. 问题可以通过阅读[**错误代码**](https://dev.twitter.com/overview/api/response-codes)和**错误消息**来确定。
  4. ```objective-c
  5. //伪代码
  6. int errorCode = [[JS [JS= EasyTwitterNoAccountSet,` 它意味着您尝试在没有设置Twitter帐户的情况下发送推文。

时间线

用户的最新推文和转发代表最近的时间线。应该注意的是,home-timelineuser-timeline不同。

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

(int) count是指您希望从主页时间线返回的最近项目的数量。最大值为200。

NSArray *data将包含表示时间线的NSDictionary对象。最近的项目位于index==0。在开发过程中,您可以使用以下内容观察每个项目的具体内容:

  1. //伪代码
  2. cell.textLabel.text = [data[row] objectForKey:@"text"]; //项目的主要内容
  3. 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类。

  1. + (EasyFacebook *)sharedEasyFacebookClient

该类是一个单例类,意味着只创建了一个实例。在实践中,类会自动实例化,无需您手动操作。您可以使用以下方式使用类:[EasyFacebook sharedEasyFacebookClient].XXX[[EasyFacebook sharedEasyFacebookClient] XXX].

方法 - 登录和注销

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

  1. - (void)openSession //用于登录
  2. - (void)closeSession //用于注销
  3. - (BOOL)isLoggedIn //用于检查登录状态

通过调用openSession方法,用户将经历标准的登录过程。这通常涉及到打开官方的Facebook应用程序(如果已安装)。否则,Safari浏览器将被打开。用户将被要求授予您的应用程序访问其详细信息的权限。一旦获得批准,任何将来对openSession的调用都将短暂地打开Facebook应用程序,但几乎会立即转移到您的应用程序中 - 因为用户在过去已经批准了(只要后来没有撤销批准),提供批准不是后来撤销的。

closeSession方法将立即注销用户。

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

如果用户登录并退出您的应用程序,通常会保存本地缓存的令牌。当您的应用程序再次打开时,用户通常不需要再次登录。这是自动登录功能的一部分。

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

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

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

  1. //将readPermissions设置为所需的内容
  2. [EasyFacebook sharedEasyFacebookClient].readPermissions = @[@"public_profile", @"email", @"user_friends"];

阅读下面的“通知”部分,了解可用状态更改。

方法 - 获取基本用户信息

在用户登录后,会自动调用获取用户基本信息的方法。如果你想按需获取最新信息,可以调用此方法。

  1. - (void)fetchUserInformation

一旦信息到达,EasyFacebookUserInfoFetchedNotification通知将被发布。发布后,可以使用以下属性提取最新详细信息:

方法 - 发布权限

发布到时间线需要publish_actions权限。当你的应用准备好进入生产环境时,你还需要获得Facebook的批准。

  1. - (BOOL)isPublishPermissionsAvailableQuickCheck
  2. - (void)isPublishPermissionsAvailableFullCheck:(void(^)(BOOL result, NSError *error))responseHandler
  3. - (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:方法。

  1. - (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,则分享帖子成功。

例如:

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

输出将是:

Screen shot of a sample Share Post

通知

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报告。