問題描述
iOS Facebook 令牌權限生日 (iOS Facebook token Permissions birthday)
大家好,我需要一些幫助,我需要具有必要許可的 Facebook 令牌來顯示生日用戶...!這是我的註冊 API 的必要要求我正在查看 Facebook 開發人員我正在使用所有方法但我仍然有生日數據
#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>
‑ (IBAction)loginFaceboook:(id)sender {
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logInWithReadPermissions:@[@"email"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
{
if (error)
{
// Process error
}
else if (result.isCancelled)
{
// Handle cancellations
}
else
{
if ([[FBSDKAccessToken currentAccessToken] hasGranted:@"publish_actions"]) {
// TODO: publish content.
} else {
FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
[loginManager logInWithPublishPermissions:@[@"publish_actions"]
fromViewController:self
handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
//TODO: process error or result.
}];
}
if ([result.grantedPermissions containsObject:@"email"])
{
NSLog(@"result is:%@",result);
[self fetchUserInfo];
}
}
}];
}
‑(void)fetchUserInfo
{
if ([FBSDKAccessToken currentAccessToken])
{
// NSLog(@"Token is available : %@",[[FBSDKAccessToken currentAccessToken]tokenString]);
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:@{@"fields": @"name, email, birthday"}]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (!error)
{
NSLog(@"resultis:%@",result);
_auth_token = [[FBSDKAccessToken currentAccessToken]tokenString];
NSLog(@"Token Facebook is : %@",_auth_token);
///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\///\\\\///\\\// /\\\///\\\///\\\\///\\\///\\\///\\\
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//[manager setResponseSerializer:[AFJSONResponseSerializer serializer]];
manager.responseSerializer = [AFJSONResponseSerializer serializer];
manager.requestSerializer = [AFJSONRequestSerializer serializer];
NSDictionary *params = @{@"access_token":_auth_token};
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content‑Type"];
[manager POST:@"http:myUrl/api/facebook/" parameters:params success:^(NSURLSessionDataTask *operation, id responseObject) {
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];
if (responseObject)
{
NSLog(@"POST data JSON returned: %@", responseObject);
NSLog(@"DATA SEND OK");
}
} failure:^(NSURLSessionDataTask *task, NSError *error) {
NSLog(@"ERROR NO SEND DATA FROM FACEBOOK.. %@", error);
}];
_LoginFacebook.alpha=0;
Menu *VC2 = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController"];
[VC2 setModalTransitionStyle:(UIModalTransitionStyleCrossDissolve)];
[self presentViewController:VC2 animated:YES completion:nil ];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:self.auth_token forKey:@"tokenF"];
[prefs synchronize];
NSLog(@"Saved Toke %@",prefs);
}
else
{
NSLog(@"Error %@",error);
}
}];
}
}
來自控制台的信息數據是正確的但被交換為x不提供個人信息
email = "xxxxxxxxxxxxxxxx@aol.com";
id = xxxxxxxxxxxxxxxxx;
name = "xxxxxxxxxxx";
Token Facebook is : xxxxxxxxxxxxxxxx......!
## 參考解法 #### 方法 1:
While writing this code
[login logInWithReadPermissions:@[@"email"]
Add "public_profile" along with that
[login logInWithReadPermissions:@[@"email",@"public_profile"]
Check if it works!
EDIT
As CBroe mentioned, we need user_birthday permission and I guess nowadays we have to take approval from facebook for this permission
方法 2:
This works for me
‑ (IBAction)loginFaceboook:(id)sender {
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login setLoginBehavior:FBSDKLoginBehaviorNative];
[login logInWithReadPermissions:@[@"public_profile",@"user_birthday"] fromViewController:nil handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
if (error)
{
// Process error
}
else if (result.isCancelled)
{
// Handle cancellations
}
else
{
if ([[FBSDKAccessToken currentAccessToken] hasGranted:@"publish_actions"]) {
// TODO: publish content.
} else {
FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
[loginManager logInWithPublishPermissions:@[@"publish_actions"]
fromViewController:self
handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
//TODO: process error or result.
}];
}
if ([result.grantedPermissions containsObject:@"email"])
{
NSLog(@"result is:%@",result);
[self fetchUserInfo];
}
}
}];
}
(by user3365028、Rajan Maheshwari、Erinson)