2013-05-08 25 views
1

PFUser * aUser = [PFUser currentUser]; //可能不是當前用戶NSLog(「username%@」,[aUser username]); //如果它不是一個FB用戶,這可以。另外它給了我一個象徵。我知道有一個[PFUser isLinkedWithUser:aUser]返回的是CURRENT LOGGED USER所鏈接的,但用戶可能不是此設備中的電流。我如何獲得給定PFUser的Facebook用戶名?

該工程確定爲currentUser:

+ (void)getUsernameWithCompletionBlock:(void(^)(NSString *username))handler { 
if([PFFacebookUtils isLinkedWithUser:[PFUser currentUser]]){ //<- 
    FBRequest *request = [FBRequest requestForMe]; 
    [request startWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error) { 
    if (!error) { 
     NSDictionary *userData = (NSDictionary *)result; 
     NSString *name = userData[@"name"]; 
     handler(name); 
    }}]; 
} else { 
    handler([[PFUser currentUser] username]); 
} 

}

但我想是這樣的

+(void)getUsernameWithUser:(PFUser *)user andCompletionBlock:(void(^)(NSString  *username))handler { 
if([PFFacebookUtils isLinkedWithUser:user]){ //<- THIS ALWAYS RETURN FALSE 
    //return the real facebook username 
    } else { 
     handler([user username]); 
    } 
} 

在醫生說:isLinkedWithUser:

無論用戶有他們的帳戶鏈接到Facebook。

(BOOL)isLinkedWithUser :(PFUser *)user參數user用戶檢查facebook鏈接。用戶必須在此設備上登錄。 有什麼建議嗎?

回答

4

當您擁有不是當前用戶的用戶時,不會發送authData。您有兩種選擇:

  1. 每個用戶都可以在用戶表中存儲他們的Facebook用戶名(以及任何其他想要公開訪問的數據)。
  2. 創建一個使用主密鑰檢索authData並查詢Facebook用戶名的雲代碼函數。

對於方案二,你的雲代碼應該做類似如下的內容:

Parse.Cloud.define("facebookAlias", function(request, response) { 
    Parse.Cloud.useMasterKey(); 
    new Parse.Query(Parse.User).get(request.params.user_id).then(function(user) { 
    var authData = user.get("authData"); 

    // Quit early for users who aren't linked with Facebook 
    if (authData === undefined || authData.facebook === undefined) { 
     response.success(null); 
     return; 
    } 

    return Parse.Cloud.httpRequest({ 
     method: "GET", 
     url: "https://graph.facebook.com/me", 
     params: { 
     access_token: authData.facebook.access_token, 
     fields: "username", 
     } 
    }); 

    }).then(function(json) { 
    response.success(JSON.parse(json)["username"]); 

    // Promises will let you bubble up any error, similar to a catch statement 
    }, function(error) { 
    response.error(error); 
    }); 
}); 

免責聲明:上面的代碼大致是從一個個人項目,但足夠作了調整,我不保證反對語法錯誤。

相關問題