【问题标题】:Give iOS app permanent permission to post to Facebook授予 iOS 应用永久发布到 Facebook 的权限
【发布时间】:2015-07-04 08:31:19
【问题描述】:

我已将使用 SLRequest 的 Facebook 共享功能集成到我的 iOS 应用程序中。一切正常,但每次我想发帖时,都会向用户显示一个提示,询问是否应允许该应用代表他发帖。

出于某些原因(我从 Apple Watch 发帖),获得发帖的永久许可非常重要。否则会是非常糟糕的用户体验。

因此,我正在寻找一种可能性,可以代表用户为我的应用永久启用发布功能。

- (void)postToFacebook:(NSString *)postMessage toAudience:(int)audienceIndex {

ACAccountStore *accountStore = [[ACAccountStore alloc] init];

ACAccountType *accountTypeFacebook =
[accountStore accountTypeWithAccountTypeIdentifier:
 ACAccountTypeIdentifierFacebook];

NSArray *audienceArray = [[NSArray alloc] initWithObjects:@"ACFacebookAudienceEveryone", @"ACFacebookAudienceFriends", @"ACFacebookAudienceOnlyMe", nil];

NSDictionary *options = @{ACFacebookAppIdKey: @"<HERE'S MY FACEBOOK APP ID>", ACFacebookPermissionsKey: @[@"publish_actions"], ACFacebookAudienceKey: [audienceArray objectAtIndex:audienceIndex]};

[accountStore requestAccessToAccountsWithType:accountTypeFacebook options:options completion:^(BOOL granted, NSError *error) {

    if(granted) {

        NSArray *accounts = [accountStore accountsWithAccountType:accountTypeFacebook];
        ACAccount *facebookAccount = [accounts lastObject];

        NSDictionary *parameters =
        @{@"access_token":facebookAccount.credential.oauthToken,
          @"message": postMessage};

        NSURL *feedURL = [NSURL URLWithString:@"https://graph.facebook.com/me/feed"];

        SLRequest *feedRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodPOST URL:feedURL parameters:parameters];

        [feedRequest  performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
            NSLog(@"Request failed, %@", [urlResponse description]);
        }];

    } else {

        NSLog(@"Access Denied");
        NSLog(@"[%@]",[error localizedDescription]);

    }
}];

}

【问题讨论】:

    标签: ios objective-c facebook-graph-api watchkit apple-watch


    【解决方案1】:

    不幸的是,不再有“永久允许在 Facebook 上发帖”的概念。

    offline_access 权限已被弃用,并于 2012 年 12 月 5 日被删除(原定于 7 月 5 日)。

    见:Developer Docs > Migration > Remove offline_access Permission

    它已被新的 60 天长期访问令牌取代。

    见:Developer Docs > Facebook Login > Access Tokens

    短期和长期代币

    用户访问令牌有两种形式:短期令牌和 长期存在的令牌。短命代币的寿命通常约为 一两个小时,而长期存在的令牌通常有一个生命周期 约60天。您不应该依赖这些剩余的生命周期 相同 - 生命周期可能会在没有警告的情况下更改或提前到期。看 更多正在处理的错误。

    通过 Web 登录生成的访问令牌是短暂的令牌,但您 可以将它们升级为长寿命令牌。转换短期令牌 到长寿命令牌将在本文档后面部分中介绍 过期和延长令牌。

    使用 Facebook 移动 SDK 的移动应用会获得长期令牌。

    基本上,使用较新 SDK 的移动应用程序将自动被授予具有更长有效期的用户 access_token。只要用户在 60 天内重新访问您的应用程序,您就会被授予新用户 access_token 和新的过期时间。如果您的用户等待超过 60 天,他们将不得不重新登录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 2022-06-30
      • 2012-03-20
      • 2012-06-17
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      相关资源
      最近更新 更多