我什么时候应该续订 ACAccount?或者,如何检查凭证是否过期。 (Facebook)

2024-04-12

最近我被分配去调查如何使用iOS框架ACAccount和Social来实现facebook post功能。获取设置中配置的帐户的访问权限非常简单。

if(!_accountStore)
    _accountStore = [[ACAccountStore alloc] init];

ACAccountType *facebookTypeAccount = [_accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];

// Check if there is any faceboook account
NSArray *accounts = [_accountStore accountsWithAccountType:facebookTypeAccount];
if (![accounts count]) {
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"alert" message:@"No facebook account configured in setting." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
    return;
}

[_accountStore requestAccessToAccountsWithType:facebookTypeAccount
                                       options:@{ACFacebookAppIdKey: @"FACEBOOK-APP-ID", ACFacebookPermissionsKey: @[@"email"]}
                                    completion:^(BOOL granted, NSError *error) {
                                        if(granted){
                                            NSArray *accounts = [_accountStore accountsWithAccountType:facebookTypeAccount];
                                            _facebookAccount = [accounts lastObject];
                                            NSLog(@"Success");
                                        }else{
                                            // ouch
                                            NSLog(@"Failed, Error: %@", error);
                                            dispatch_async(dispatch_get_main_queue(), ^{
                                                NSString *message = [NSString stringWithFormat:@"App access denied, please grant access in Setting->Facebook. Error message::%@", error];
                                                UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Alert" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
                                                [alert show];
                                            });
                                        }
                                    }];

一旦应用程序获得 facebook 的访问权限,它就可以使用 SLComposeViewController 发布消息:

- (IBAction)postButtonPressed:(id)sender {
if (!_facebookAccount) {
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"alert" message:@"login first" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];
    return;
}

SLComposeViewController *fbController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];

if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
    SLComposeViewControllerCompletionHandler __block completionHandler=^(SLComposeViewControllerResult result){

        [fbController dismissViewControllerAnimated:YES completion:nil];

        switch(result){
            case SLComposeViewControllerResultCancelled:
            default:
            {
                NSLog(@"Cancelled.....");

            }
                break;
            case SLComposeViewControllerResultDone:
            {
                NSLog(@"Posted....");
            }
                break;
        }};

    [fbController setInitialText:@"Test message"];
    [fbController setCompletionHandler:completionHandler];
    [self presentViewController:fbController animated:YES completion:nil];
} else {
    NSLog(@"no facebook setup");
}

我的问题来了。我发现 ACAccountStore 中有一个方法用于更新 ACAccount 的过期凭证:

- (void)renewCredentialsForAccount:(ACAccount *)account completion:(ACAccountStoreCredentialRenewalHandler)completionHandler;

但我什至不知道如何检查凭证是否已过期以便我可以更新它。有人对此有什么想法吗?

哦,顺便说一句,我们只是想使用原生的 Social 框架来做一些简单的工作,比如发布一些消息或图片。因此,如果不需要,我们不会使用 facebook SDK。

如果您知道如何检查凭证是否有效,请发表评论或提交答案,谢谢:)

更新时间 2013.11.20 11:10

我从这个问题的实验中学到了一些东西。

  1. 在获得访问权限之前,无法从帐户存储中获取某些类型的帐户,因此我不应该在请求访问之前检查帐户计数。

  2. Facebook 帐户更改后,当使用 ACAccount 的应用程序在后台运行时,会调用更新通知。目前,我只看到访问权限的变化会触发通知。

  3. 如果用户更改密码,当用户尝试发布内容时,系统会弹出警报,要求用户更改密码。

我认为监控帐户更改通知足以处理更改。我会接受第一个答案。


每次不同步时,您都应该更新用户帐户。如果用户更改了密码或 acc 会话已过期,则可能会发生这种情况。

您可以使用以下通知知道您处于这种情况:

ACDAccountStore DidChangeNotification https://developer.apple.com/LIBRARY/IOS/documentation/Accounts/Reference/ACAccountStoreClassRef/ACAccountStore.html#//apple_ref/c/data/ACAccountStoreDidChangeNotification

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我什么时候应该续订 ACAccount?或者,如何检查凭证是否过期。 (Facebook) 的相关文章

随机推荐

  • 通过Python中的selenium驱动程序将图像导入谷歌表单

    我正在尝试将图像导入谷歌表单 我无法通过 xpath 将密钥传递给元素 看来这是一个隐藏的元素 我尝试执行脚本来取消隐藏它 但没有成功 也尝试过这个解决方案 如何使用 Selenium WebDriver python 访问隐藏的文件上传字
  • C++ 中的 Stringstream 解析单词和数字字符串

    我有这样的字符串 123加43次7 其中数字后面跟着字典中的单词 我知道我可以使用以下命令提取 int numbers gt gt 操作员 StringStream gt gt number 我可以拿到号码 然而 Stream 中仍然有该号
  • 将 JFrame 方向设置为从右到左!

    为了从右到左对齐我的 JFrame 我使用 setComponentOrientation ComponentOrientation RIGHT TO LEFT 但这仅当我使用 JFrame 的以下样式 装饰 时才有效 public cla
  • 如何使用 JaCoCo 忽略内部/嵌套类?

    我试图忽略一些生成的类 并且这些类被很好地忽略 但是 如果这些类具有内部类 则尽管父类被排除 但这些类仍然会被包含在内 这是我的配置
  • Asp.Net 3.5 路由到 Web 服务?

    我一直在寻找一种路线http www example com WebService asmx http www example com WebService asmx to http www example com service http
  • PhoneGap支持普通网络吗?

    phoneGap是否支持普通网页 如果支持的话我可以给我一个可以浏览的链接吗 thanks sri 当然 它可以加载到您现有的 UIWebView 实例中 或者加载到 ChildBrowser 中plugin http github com
  • 在 vim 中全局追加到具有匹配术语的行

    我确信这很容易 我只是缺少一两个字符 我需要在文件中搜索特定术语 当找到它时 我需要在该行添加一些内容 我想对比赛的每一行都这样做 要执行一次 我可以这样做 Thing to find s Stuff to append 简单的 如果我的
  • Java SSLHandshakeException:没有共同的密码套件

    我正在尝试使用 Java SSLSockets 将安全性应用于简单的聊天应用程序 我创建了一个自签名 CA 并用它签署了两个证书 全部使用 RSA 密钥 一个用于服务器 一个用于客户端 之后 我将证书导入到服务器的密钥库和客户端的另一个密钥
  • OS X 下 JRE 8 的 /lib/security 文件夹在哪里? [复制]

    这个问题在这里已经有答案了 我正在 OS X 下从 Java JRE 8 搜索文件夹 lib security 在 Windows 下 fodler 位于 java 安装目录的子文件夹 lib security 中 例如 C Program
  • ObservationCollection 使用 MVVM 架构在 PCL 内的 ViewModel 中实现 ISupportIncrementalLoading 以支持 WinRT 和 WP8/WinPRT

    我的 ViewModel 位于 PCL 内 因为我正在并行开发 Windows 8 1 和 Windows Phone 应用程序 我的 ViewModel 中有一个作为 ObservableCollection 的内容列表 我在 Windo
  • 深入学习 C# 表达式树的最佳资源是什么?

    当我第一次输入这个问题时 我这样做是为了找到重复的问题 我确信一定有人已经问过这个问题 我的计划是关注那些重复的链接 而不是发布这个问题 但据我所知 这个问题以前没有被问过 它没有出现在 相关问题 列表中 您找到了哪些用于深入了解 C 表达
  • Git 文件超出了符号链接范围

    我遇到了一个问题 Git 认为文件超出了符号链接的范围 因此无法对其进行版本控制 但它似乎是一个真实的文件 root r1 h stat f conf core site xml File conf core site xml ID 5c7
  • AQL 构建域对象不返回结果

    我遇到了一个问题 即使用 AQL 时无法返回对构建域对象进行的任何查询 当我进行以下卷曲时 curl X GET H X JFrog Art Api myArtifactroyKey H Cache Control no cache htt
  • .value_counts() 给出截断的结果

    我有一个 Excel 文件 其中有一列包含多个单词 我正在尝试计算每个单词出现的频率 所以如果我有一个清单 Labels a a b b c c c 输出应该是 c 3 b 2 a 2 我正在使用以下代码片段 import pandas a
  • Haskell 中的有限自动机

    在 Haskell 中表示有限自动机的好方法是什么 它的数据类型是什么样的 在我们学院 自动机被定义为 5 元组 Q X delta q 0 F 其中 Q 是自动机状态的集合 X 是字母表 这部分是否必要 delta 是从 Q X 获取 2
  • 安装 Android Studio Bumblebee 2021.1.1 补丁 1 的正确方法是什么

    很抱歉 但我现在真的很困惑和怀疑 所以我求助于 SO 来弄清楚 我正在运行 Android Studio Bumblebee 并看到一条有关主要新版本的通知 其中包含以下文本 Android Studio Bumblebee 2021 1
  • java.io.IOException:服务器返回 HTTP 响应代码:URL 为 405

    我有一个在线 servlet 我正在尝试联系它以进行一些基本测试 这是 servlet 代码 import java io IOException import java io PrintWriter import javax servle
  • Pipenv 和 bash 别名

    我在我的文件中定义了一组核心 bash 别名 bash profile 苹果 但是当我激活 Pipenv 时pipenv shell 我的别名不起作用 bashalias命令不返回任何内容 是否需要配置步骤来生成从父 shell 继承 ba
  • 加密字符串的长度

    我需要创建一个数据库列 用于存储使用 Triple DES 加密的字符串 如何确定加密字符串列的长度 也欢迎除 Triple DES 以外的算法的答案 DES 3DES 和 AES 等分组密码只能对字节块进行操作 DES 和 3DES 在
  • 我什么时候应该续订 ACAccount?或者,如何检查凭证是否过期。 (Facebook)

    最近我被分配去调查如何使用iOS框架ACAccount和Social来实现facebook post功能 获取设置中配置的帐户的访问权限非常简单 if accountStore accountStore ACAccountStore all