Pytanie Logowanie do Facebooka za pośrednictwem frameworka społecznościowego w ios


Jestem nowy z rozwojem iOS. Muszę zintegrować login Facebooka w mojej aplikacji na iOS, ponieważ logi użytkownika pobierają wszystkie informacje i przesuwają je do ekranu głównego. Zrobiłem to za pomocą najnowszego SDK na Facebooku, ale chcę, aby było to zrobione za pośrednictwem środowiska społecznościowego. Przeszedłem przez wiele rzeczy online, a także znalazłem przykłady, w których udostępniają (publikują) treści na Facebooku (Wall) za pośrednictwem frameworku społecznościowego, ale nie logują się dokładnie na Facebooku. Każdy, proszę, pomóż mi, daj mi znać, jeśli logowanie do Facebooka jest możliwe za pośrednictwem środowiska społecznościowego lub muszę trzymać się SDK. Z góry dziękuję


14
2017-12-26 07:05


pochodzenie


@Facebbok SDK jest najlepszym rozwiązaniem do uzyskania dostępu do wszystkich formantów Facebooka. zasugeruję to. - ChenSmile
ale czy to nie jest zła praktyka? podobny rozmiar SDK to prawie 10-11 MB - Arun
ale ze względu na różne problemy z bezpieczeństwem nie można używać frameworka społecznościowego jako kompletnego pakietu SDK Facebooka - ChenSmile
Jeśli chcesz pobrać informacje o użytkowniku, musisz użyć interfejsu graficznego w połączeniu ze środowiskiem społecznościowym i kontem (do logowania), jak wyjaśniono poniżej przez @ iSuman. - execv
@ShehbazKhan całkiem stare rzeczy, z wieloma przestarzałymi API. Nie użyłbym. Oficjalny pakiet SDK FB to droga, możemy na to narzekać, ale jest to jedyny sposób na pełną integrację z interfejsem API wykresów. Interfejs społecznościowy iOS wymaga ustawienia konta w ustawieniach. Oficjalny pakiet SDK może również wyświetlać w locie nazwę użytkownika i pwd. - Andrea


Odpowiedzi:


Importuj framwork społeczny i pomocniczy

umieść ten kod w pliku .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);
        }
    }];
}

Zalogowałeś się również w swojej macierzystej aplikacji na Facebooku w swoim urządzeniu / Symulatorze


22
2017-12-26 07:20



W tym celu musisz mieć aplikację na Facebooku, której klucz musisz podać wraz z odbiorcami i uprawnieniami w słowniku opcji logowania. - execv
@Maximus, czy możesz mi powiedzieć, jak zrobić to samo dla Twittera? - Abhishek Gupta
Właściwie to nie zaimplementowałem tego na twitterze, sprawdź tę nadzieję, że ci to pomoże dev.twitter.com/docs/ios @AbhishekGupta - morroko
Czy potrzebujesz requestAccessToAccountsWithType za każdym razem? Z pewnością, gdy użytkownik przyzna dostęp, nie trzeba go dalej sprawdzać. W każdym razie dookoła tego? - Supertecnoboff
czy jest jakiś problem z frameworkiem społecznościowym we wcześniejszych wersjach 10.2 - jeff ayan


Swift 3 Wersja rozwiązania @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")
                }
            }
        }
    }

}

1
2018-02-16 16:28





Logowanie na Facebooku za pomocą kont i struktury społecznej (swift)

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")
                        })
                    }

                }
            }

0
2018-04-15 08:24