ios facebook sdk 4.0 login error kode 304

I've hanya diperbarui facebook sdk v4.0

dan sesuai tutorial dari Menggunakan Custom Login UIs

-(IBAction)facebookLoginClick:(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 you ask for multiple permissions at once, you
        // should check if specific permissions missing
        if ([result.grantedPermissions containsObject:@"email"]) {
            // Do work
        }
    }
}];
}

TAPI hasilnya selalu nihil dan kode kesalahan adalah 304, aku kehilangan sesuatu?

Mengomentari pertanyaan (1)

Saya punya masalah yang sama.

Setelah inisialisasi FBSDKLoginManager saya menambahkan baris untuk flush data dan (Facebook)Token:

FBSDKLoginManager *loginmanager= [[FBSDKLoginManager alloc]init];    
[loginmanager logOut];

Semoga ini bisa membantu.


Dengan demikian, persis seperti OP bertanya, "aku kehilangan sesuatu"?

Ya, standar berikut contoh kode yang terlihat di mana-mana, hanya salah:

-(IBAction)facebookLoginClick:(id)sender
{
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
---- ONE MAGIC LINE OF CODE IS MISSING HERE ----
[login logInWithReadPermissions:@[@"email"]
   handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
    {
    if (error) {...}
    else if (result.isCancelled) {...}
    else { // (NB for multiple permissions, check every one)
       if ([result.grantedPermissions containsObject:@"email"])
          { NSLog(@"%@",result.token); }
       }
}];
}

anda harus melakukan ini:

-(IBAction)facebookLoginClick:(id)sender
{
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logOut];   //ESSENTIAL LINE OF CODE
[login logInWithReadPermissions:@[@"email"]
   handler:^(FBSDKLoginManagerLoginResult *result, NSError *error)
    {
    if (error) {...}
    else if (result.isCancelled) {...}
    else { // (NB for multiple permissions, check every one)
       if ([result.grantedPermissions containsObject:@"email"])
          { NSLog(@"%@",result.token); }
       }
}];
}

Jika tidak, sangat sederhana, aplikasi ini tidak akan bekerja jika user yang terjadi mengubah FB account pada perangkat. (Kecuali jika mereka terjadi untuk beberapa alasan re-menginstal aplikasi!)

Sekali lagi - populer sampel kode di atas hanya tidak bekerja (aplikasi ini berjalan di lingkaran tak berujung) jika pengguna terjadi untuk mengubah account FB. LogOut panggilan yang harus dibuat.

Komentar (9)

Hal ini terjadi pada saya ketika saya mengubah Facebook AppID (di Info.plist) pengalihan bentuk tes Facebook app untuk produksi Facebook app. Jika aplikasi anda mengirimkan Facebook token ke server yang menghasilkan JWT untuk misalnya, Facebook SDK masih berlanjut fbToken (FBSDKAccessToken.currentAccessToken()) bertahan kecuali's mengatakan untuk menghapusnya. Yang mungkin juga terjadi pada produksi ketika pengguna log out dari aplikasi, log out, permintaan API akan log pengguna keluar dan me-reset JWT. Tetapi bahkan sebelum mengirim log out permintaan API, klien akan perlu untuk memberitahu FBSDKLoginManager contoh untuk log out.

if let currentAccessToken = FBSDKAccessToken.currentAccessToken() where currentAccessToken.appID != FBSDKSettings.appID()
    {
        loginManager.logOut()
    }
Komentar (0)

Aku punya ini, itu terjadi ketika mengubah aplikasi FB rincian dalam Xcode sementara sebuah aplikasi iOS berjalan. Anda perlu untuk menghapus aplikasi dari perangkat dan kemudian menerbitkan dengan FB baru aplikasi setup. Hanya recompiling tidak cukup untuk menghapus FB lama pengaturan

Komentar (1)

Swift 3.0

func loginWithFacebook
{
        let loginManager = FBSDKLoginManager()
        if let currentAccessToken = FBSDKAccessToken.current(), currentAccessToken.appID != FBSDKSettings.appID()
        {
            loginManager.logOut()
        }

        loginManager.logIn(withReadPermissions: ["public_profile","email"], from: self, handler: { (result, error) in
            if error != nil {
                print("error\(String(describing: error))")
            }
            else if (result?.isCancelled)! {
            }
            else {
                print(FBSDKAccessToken.current())
            }
        })
}
Komentar (0)

Anda dapat menggunakan kode berikut untuk memecahkan masalah anda :

[FBSDKAccessToken refreshCurrentAccessToken:^(FBSDKGraphRequestConnection *connection, id result, NSError *error){}
Komentar (0)

Menurut dokumen, 304 FBSDKLoginUserMismatchErrorCode "Menunjukkan kegagalan untuk permintaan izin baru karena pengguna telah mengubah".

Masuk akal dalam skenario @Adrian999 disebutkan.

Komentar (0)

Swift 4.0 dan FBSDKCoreKit 4.33

let loginManager = LoginManager()
if let currentAccessToken = AccessToken.current, currentAccessToken.appId != SDKSettings.appId
{
    loginManager.logOut()
}
Komentar (0)

swift 4.0, 4.2, 5.0

FBSDKLoginManager().logOut()
Komentar (0)

Sebenarnya, alasannya sangat sederhana, anda dapat mencoba langkah berikut untuk muncul kembali kode kesalahan ini dengan mudah.

"Facebook login gagal" mungkin memiliki dua alasan:

  1. anda mendapatkan info pengguna dari facebook gagal.
  2. anda mendapatkan info pengguna dari facebook sukses,tapi meng-upload ke server anda sendiri gagal.

Kode di FBSDKLoginManager.m adalah:

- (void)validateReauthentication:(FBSDKAccessToken *)currentToken withResult:(FBSDKLoginManagerLoginResult *)loginResult
{
  FBSDKGraphRequest *requestMe = [[FBSDKGraphRequest alloc] initWithGraphPath:@"me"
                                                                   parameters:nil
                                                                  tokenString:loginResult.token.tokenString
                                                                   HTTPMethod:nil
                                                                        flags:FBSDKGraphRequestFlagDoNotInvalidateTokenOnError | FBSDKGraphRequestFlagDisableErrorRecovery];
  [requestMe startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
NSString *actualID = result[@"id"];
  if ([currentToken.userID isEqualToString:actualID]) {
    [FBSDKAccessToken setCurrentAccessToken:loginResult.token];
    [self invokeHandler:loginResult error:nil];
  } else {
    NSMutableDictionary *userInfo = [NSMutableDictionary dictionary];
    [FBSDKInternalUtility dictionary:userInfo setObject:error forKey:NSUnderlyingErrorKey];
    NSError *resultError = [NSError errorWithDomain:FBSDKLoginErrorDomain
                                             code:FBSDKLoginUserMismatchErrorCode
                                         userInfo:userInfo];
   [self invokeHandler:nil error:resultError];
  }
}];
}

kapan currentToken.userID tidak sama actualID, FBSDKLoginUserMismatchErrorCode akan melempar.

Sekarang, masalah ini akan muncul ketika pengguna login facebook gagal,tetapi anda tidak memiliki [FacebookSDKManager logOut] setelah gagal, aplikasi akan men-cache accessToken untuk pengguna , dan kemudian pengguna mengubah facebook account untuk user B, ketika user B login facebook lagi,ia akan muncul kembali masalah ini.

Komentar (0)

Saya juga terjebak pada masalah ini untuk sementara waktu. kemudian saya buat objek untuk FBSDKLoginManager di .h file dan di viewDidLoad dari .m file , menginisialisasi dan mengatur keluar kamar.

 _fbLogin= [[FBSDKLoginManager alloc]init];    
 [_fbLogin logOut];

Ini membantu saya dan semoga membantu anda juga. Semua yang terbaik.

Terima kasih

Komentar (0)

Bagi saya di Objective-C berikut bekerja

FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
if ([FBSDKAccessToken currentAccessToken]) {
             [login logOut];
        }

dan masalah pengguna mencoba untuk login sebagai user lain seperti yang disarankan oleh @Vineeth Joseph

Komentar (0)

Single Sign On

I've juga menemukan bahwa masalah ini terjadi jika anda memiliki sebuah aplikasi yang tidak memerlukan single sign on (yaitu sebuah aplikasi yang beberapa pengguna akan membuat konten dan berbagi satu perangkat).

Anda dapat mengubah single sign on dalam pengaturan aplikasi anda https://developers.facebook.com/apps/your-app-id/settings/.

Komentar (0)

Memeriksa keadaan anda FBSession:

isOpen
Indicates whether the session is open and ready for use.
@property (readonly) BOOL isOpen;
Declared In: FBSession.h

https://developers.facebook.com/docs/reference/ios/3.0/class/FBSession/

Komentar (2)

304 menunjukkan bahwa tidak ada yang berubah. Mungkin anda entah sudah dikonfirmasi dan sehingga mendapatkan nihil dengan 304 menunjukkan tidak ada yang berubah.

Komentar (1)