Im "alten" FB iOS SDK konnte ich Benutzerinformationen über Folgendes erhalten:
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"SELECT uid, name, email, pic FROM user WHERE uid=me()", @"query",
nil];
JBFacebookManager *fbManager = [JBFacebookManager getInstance];
fbManager.requestDelegate = self;
[fbManager.facebook requestWithMethodName:@"fql.query"
andParams:params
andHttpMethod:@"POST"
andDelegate:self];
Wie kann ich das mit dem neuen FB iOS SDK 3.0 machen? Muss ich FBRequest
oder FBOpenGraphAction
oder FBGraphObject
oder eine Kombination davon oder etwas völlig anderes verwenden?
if (FBSession.activeSession.isOpen) {
[[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) {
if (!error) {
self.nameLabel.text = user.name;
self.emailLabel.text = [user objectForKey:@"email"];
}
}];
}
Da FBGraphUser
keine E-Mail @property
hat, können wir nicht auf die Informationen wie mit dem Namen (Punkt-Syntax) zugreifen, jedoch hat das NSDictionary immer noch das E-Mail-Kv-Paar und wir können darauf zugreifen, wie wir es mit einem normalen NSDictionary tun würden .
Vergessen Sie nicht, um die E-Mail-Erlaubnis zu bitten:
NSArray *permissions = [[NSArray alloc] initWithObjects:@"email", nil];
[FBSession sessionOpenWithPermissions:permissions completionHandler:
^(FBSession *session, FBSessionState state, NSError *error) {
[self facebookSessionStateChanged:session state:state error:error];
}];
Sobald Sie Zugriff auf (id<FBGraphUser>)user
haben, können Sie einfach user[@"email"]
verwenden.
daraus können wir die Basisinformationen und die E-Mail-ID des Facebook-Benutzers erhalten.
[FBSession openActiveSessionWithReadPermissions:@[@"basic_info",@"email"] allowLoginUI:YES completionHandler:^(FBSession *session,FBSessionState status,NSError *error){
if(error)
{
NSLog(@"Facebook Error : %@",error.localizedDescription);
}
else{
}
// Respond to session state changes,
// ex: updating the view
}];
Haben Sie den Quellcode des 3.0 SDK gelesen? Es gibt eine Methode, die ich für identisch halte:
- (FBRequest*)requestWithMethodName:(NSString *)methodName
andParams:(NSMutableDictionary *)params
andHttpMethod:(NSString *)httpMethod
andDelegate:(id <FBRequestDelegate>)delegate;
Die einfachste Methode, um die Informationen nach dem Einloggen abzurufen, ist:
-(IBAction)loginWithFacebook:(id)sender{
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login
logInWithReadPermissions: @[@"public_profile",@"email"]
fromViewController:self
handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
if (error) {
NSLog(@"Process error");
} else if (result.isCancelled) {
NSLog(@"Cancelled");
} else {
NSLog(@"Logged in");
[self getFacebookProfileInfos];
}
}];
}
-(void)getFacebookProfileInfos {
NSDictionary *parameters = @ {@"fields": @"id, name, first_name, last_name, picture.type(large), email"};
if ([FBSDKAccessToken currentAccessToken]) {
[[[FBSDKGraphRequest alloc] initWithGraphPath:@"me" parameters:parameters]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (!error) {
NSLog(@"fetched user:%@", result);
}
}];
}
}
Sie erhalten alle Informationen zum Ergebnis.