![](/img/trans.png)
[英]Login with Facebook latest sdk if native app install then dialog not open in android
[英]Facebook android sdk login dialog
我正在使用Facebook android sdk 3.0。 我想要的是用戶的ID和訪問令牌,我可以很好地獲取它。 問題是,如果設備上未安裝fb應用,並且我嘗試登錄,它確實會登錄,但登錄對話框會再次彈出,即使單擊該對話框的關閉按鈕后,對話框也會一直彈出,直到並且除非我再次登錄。
這是我的代碼:
if(v.getId()==imgLike.getId())
{
try
{
/*
* Logging in with Facebook
*/
try
{
login_facebook();
}catch(NullPointerException npx)
{
npx.printStackTrace();
}
catch(Exception ex)
{
}
}catch(Exception ex)
{
ex.printStackTrace();
}
}
public void login_facebook()
{
try
{
Session.openActiveSession(acontext, true, new Session.StatusCallback() {
@Override
public void call(final Session session, SessionState state, Exception exception) {
// TODO Auto-generated method stub
if(session.isOpened())
{
List<String> permissions = session.getPermissions();
if (!isSubsetOf(PERMISSIONS, permissions)) {
pendingPublishReauthorization = true;
Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(acontext, PERMISSIONS);
session.requestNewPublishPermissions(newPermissionsRequest);
}
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
// TODO Auto-generated method stub
if(user!=null)
{
fbUserid=user.getId();
fbAccessToken=session.getAccessToken();
Log.i("User Name ", "Name : "+user.getName());
Log.i("User Id ", "Id : "+user.getId());
Log.i("User Access Token ", "Access Token : "+session.getAccessToken());
new LikeUrl().execute(carName.get(currentIMage));
}
}
});
}
}
});
}catch(NullPointerException npx)
{
npx.printStackTrace();
}catch(BadTokenException bdx)
{
bdx.printStackTrace();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try
{
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}catch(IllegalStateException ilgx)
{
ilgx.printStackTrace();
}
catch (NullPointerException e) {
// TODO: handle exception
e.printStackTrace();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) {
for (String string : subset) {
if (!superset.contains(string)) {
return false;
}
}
return true;
}
在未安裝Facebook應用程序的情況下使用模擬器時,我遇到了同樣的問題。 實際上,我認為第一個對話框登錄名是需要基本權限(即公共個人資料和朋友列表)的登錄名,而第二個對話框是附加權限(在您的情況下為讀取權限)。
當我安裝了官方的Facebook應用程序時,兩個對話框完全根據此假設進行了更改。
如果要在此處進行單個對話框或單個權限請求,可以找到有用的討論: 鏈接
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.