Я новичок в разработке iOS. Мне нужно интегрировать вход через Facebook в мое приложение для iOS, поскольку пользователь входит в него, чтобы получить всю информацию и перейти на главный экран. Я сделал это с помощью последнего SDK Facebook, но я хочу, чтобы это было сделано с помощью социальной среды. Я прошел через множество онлайн-материалов, а также нашел примеры, когда они делятся (размещают) контент на странице Facebook (стене) через социальную структуру, но не точно входят в Facebook. Кто-нибудь, пожалуйста, помогите, дайте мне знать, возможен ли вход в Facebook через социальную сеть или мне нужно придерживаться SDK. Заранее спасибо
Вход в Facebook через социальную структуру в ios
comment
@Facebbok SDK — лучшее решение для доступа ко всем элементам управления Facebook. я предложу это.
- person ChenSmile   schedule 26.12.2013
comment
но разве это не плохая практика? вроде размер sdk почти 10-11MB
- person Arun   schedule 26.12.2013
comment
но из-за различных проблем с безопасностью вы не могли использовать социальную структуру в качестве полноценного Facebook SDK.
- person ChenSmile   schedule 26.12.2013
comment
Если вы хотите получить информацию о пользователе, вам нужно использовать API графа в сочетании с социальной сетью и инфраструктурой учетных записей (для входа в систему), как описано ниже @iSuman.
- person dispatchMain   schedule 26.12.2013
comment
вы можете использовать fbconnect для входа в систему и получения всей информации о пользователе. Я сделал ту же функциональность с этим github.com/twotoasters /fbconnect-iphone
- person Shehbaz Khan   schedule 26.12.2013
comment
@ShehbazKhan довольно старый материал с большим количеством устаревших API. Я бы не стал использовать. Официальный SDK FB — это то, что нужно, мы можем жаловаться на это, но это единственный способ иметь полную интеграцию с графическим API. Social iOS API требует, чтобы вы установили учетную запись в настройках. Официальный SDK может также работать, запрашивая имя пользователя и пароль на лету.
- person Andrea   schedule 26.12.2013
Ответы (3)
Импорт социальных сетей и учетных записей
поместите этот код в свой файл .m
-(void)facebook
{
self.accountStore = [[ACAccountStore alloc]init];
ACAccountType *FBaccountType= [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
NSString *key = @"451805654875339";
NSDictionary *dictFB = [NSDictionary dictionaryWithObjectsAndKeys:key,ACFacebookAppIdKey,@[@"email"],ACFacebookPermissionsKey, nil];
[self.accountStore requestAccessToAccountsWithType:FBaccountType options:dictFB completion:
^(BOOL granted, NSError *e) {
if (granted)
{
NSArray *accounts = [self.accountStore accountsWithAccountType:FBaccountType];
//it will always be the last object with single sign on
self.facebookAccount = [accounts lastObject];
ACAccountCredential *facebookCredential = [self.facebookAccount credential];
NSString *accessToken = [facebookCredential oauthToken];
NSLog(@"Facebook Access Token: %@", accessToken);
NSLog(@"facebook account =%@",self.facebookAccount);
[self get];
[self getFBFriends];
isFacebookAvailable = 1;
} else
{
//Fail gracefully...
NSLog(@"error getting permission yupeeeeeee %@",e);
sleep(10);
NSLog(@"awake from sleep");
isFacebookAvailable = 0;
}
}];
}
-(void)checkfacebookstatus
{
if (isFacebookAvailable == 0)
{
[self checkFacebook];
isFacebookAvailable = 1;
}
else
{
printf("Get out from our game");
}
}
-(void)get
{
NSURL *requestURL = [NSURL URLWithString:@"https://graph.facebook.com/me"];
SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodGET URL:requestURL parameters:nil];
request.account = self.facebookAccount;
[request performRequestWithHandler:^(NSData *data, NSHTTPURLResponse *response, NSError *error) {
if(!error)
{
NSDictionary *list =[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
NSLog(@"Dictionary contains: %@", list );
self.globalmailID = [NSString stringWithFormat:@"%@",[list objectForKey:@"email"]];
NSLog(@"global mail ID : %@",globalmailID);
fbname = [NSString stringWithFormat:@"%@",[list objectForKey:@"name"]];
NSLog(@"faceboooookkkk name %@",fbname);
if([list objectForKey:@"error"]!=nil)
{
[self attemptRenewCredentials];
}
dispatch_async(dispatch_get_main_queue(),^{
});
}
else
{
//handle error gracefully
NSLog(@"error from get%@",error);
//attempt to revalidate credentials
}
}];
self.accountStore = [[ACAccountStore alloc]init];
ACAccountType *FBaccountType= [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
NSString *key = @"451805654875339";
NSDictionary *dictFB = [NSDictionary dictionaryWithObjectsAndKeys:key,ACFacebookAppIdKey,@[@"friends_videos"],ACFacebookPermissionsKey, nil];
[self.accountStore requestAccessToAccountsWithType:FBaccountType options:dictFB completion:
^(BOOL granted, NSError *e) {}];
}
-(void)accountChanged:(NSNotification *)notification
{
[self attemptRenewCredentials];
}
-(void)attemptRenewCredentials
{
[self.accountStore renewCredentialsForAccount:(ACAccount *)self.facebookAccount completion:^(ACAccountCredentialRenewResult renewResult, NSError *error){
if(!error)
{
switch (renewResult) {
case ACAccountCredentialRenewResultRenewed:
NSLog(@"Good to go");
[self get];
break;
case ACAccountCredentialRenewResultRejected:
NSLog(@"User declined permission");
break;
case ACAccountCredentialRenewResultFailed:
NSLog(@"non-user-initiated cancel, you may attempt to retry");
break;
default:
break;
}
}
else{
//handle error gracefully
NSLog(@"error from renew credentials%@",error);
}
}];
}
Также вы вошли в собственное приложение Facebook на своем устройстве/симуляторе
person
Gajendra Rawat
schedule
26.12.2013
Для этого вам нужно иметь приложение facebook, ключ которого вы должны указать вместе с аудиторией и разрешениями в словаре параметров входа.
- person dispatchMain; 26.12.2013
@Maximus, не могли бы вы рассказать мне, как сделать то же самое для Twitter?
- person Abhishek Gupta; 17.04.2014
на самом деле я не реализовал это для твиттера, проверьте это, надеюсь, это поможет вам dev.twitter.com/docs/ ios @AbhishekGupta
- person Gajendra Rawat; 18.04.2014
Вам нужно
requestAccessToAccountsWithType
каждый раз? Конечно, как только пользователь предоставил доступ, вам не нужно продолжать его проверять. Во всяком случае вокруг этого?
- person Supertecnoboff; 18.11.2015
есть ли проблема с системой входа в социальные сети с более ранними версиями 10.2?
- person jeff ayan; 03.08.2017
Swift 3 Версия решения @reena
@IBAction func loginButtonPressed(_ sender: UIButton) {
var facebookAccount: ACAccount?
let options:[String : Any] = [ACFacebookAppIdKey: "YOUR_FACEBOOK_API_KEY", ACFacebookPermissionsKey: ["email"],ACFacebookAudienceKey:ACFacebookAudienceFriends]
let accountStore = ACAccountStore()
let facebookAccountType = accountStore.accountType(withAccountTypeIdentifier: ACAccountTypeIdentifierFacebook)
accountStore.requestAccessToAccounts(with: facebookAccountType, options: options) { (granted:Bool, error:Error?) in
if granted{
let accounts = accountStore.accounts(with: facebookAccountType)
facebookAccount = accounts?.last as? ACAccount
let dict:NSDictionary = facebookAccount!.dictionaryWithValues(forKeys: ["properties"]) as NSDictionary
let properties:NSDictionary = dict["properties"] as! NSDictionary
print("facebook Response is-->:%@",properties)
}
else {
if let err = error as? NSError, err.code == Int(ACErrorAccountNotFound.rawValue) {
DispatchQueue.main.async {
self.displayAlert("There is no Facebook accounts configured. you can add or created a Facebook account in your settings.")
}
} else {
DispatchQueue.main.async {
self.displayAlert("Permission not granted For Your Application")
}
}
}
}
}
person
Bruno
schedule
16.02.2017
Вход в Facebook с помощью учетных записей и социальных сетей (быстро)
var facebookAccount: ACAccount?
let options: [NSObject : AnyObject] = [ACFacebookAppIdKey: "YOUR_FACEBOOK_API_KEY", ACFacebookPermissionsKey: ["publish_stream","publish_actions"],ACFacebookAudienceKey:ACFacebookAudienceFriends]
let accountStore = ACAccountStore()
let facebookAccountType = accountStore.accountTypeWithAccountTypeIdentifier(ACAccountTypeIdentifierFacebook)
accountStore.requestAccessToAccountsWithType(facebookAccountType, options: options) { (granted, error) -> Void in
if granted
{
let accounts = accountStore.accountsWithAccountType(facebookAccountType)
self.facebookAccount = accounts.last as? ACAccount
let accountsArray=accountStore.accountsWithAccountType(facebookAccountType) as NSArray
self.facebookAccount=accountsArray.lastObject as? ACAccount
var dict:NSDictionary
dict=NSDictionary()
dict=self.facebookAccount!.dictionaryWithValuesForKeys(["properties"])
let properties:NSDictionary=dict["properties"] as! NSDictionary
print("facebook Response is-->:%@",properties)
}
else
{
if error.code == Int(ACErrorAccountNotFound.rawValue) {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.displayAlert("There is no Facebook accounts configured. you can add or created a Facebook account in your settings.")
})
} else {
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.displayAlert("Permission not granted For Your Application")
})
}
}
}
person
Reema
schedule
15.04.2016