2015-01-16 48 views
0

我知道這個問題已被問到,但我一直在嘗試500種不同的方式爲我的android應用程序生成一個發佈密鑰,所以我可以使用facebook來獲取數據。原因是我想在我自己的設備上測試它,當我嘗試使用Facebook登錄時遇到的錯誤是「無效密鑰哈希」,後面跟着一個我從未輸入過的密鑰哈希。android的發佈密鑰爲facebook

那麼,我試圖產生密鑰散列?

我已經在Java庫與我的命令提示符,進入這一行:

keytool -exportcert -alias androiddebugkey -keystore C:\Users\Riaan\.android | C:\OpenSSL\bin\openssl sha1 -binary | C:\OpenSSL\bin\openssl base64 

androiddebugkey是密鑰存儲的別名我,當我從出口日食的文件,路徑密鑰庫是一個是我在C:users\riaan\.android,它叫做debug.keystore。

然後在下一行我定義了openssl的路徑,然後我再次執行此操作。

我確實得到了一些看起來像是關鍵散列的東西。但是,當我把它放在臉書上時,我仍然會遇到同樣的錯誤。它曾經工作過一次而不是停止工作。

我發現好奇的另一件事是,當我將該行放入命令提示符時,系統沒有提示輸入密碼。所以很明顯我做錯了什麼,但是什麼?

的完整性我會給代碼這裏登錄頁面:

import java.util.ArrayList; 
    import java.util.Arrays; 

    import org.json.JSONArray; 
    import org.json.JSONObject; 

    import com.facebook.Request; 
    import com.facebook.Response; 
    import com.facebook.Session; 
    import com.facebook.SessionState; 
    import com.facebook.UiLifecycleHelper; 
    import com.facebook.model.GraphObject; 
    import com.facebook.model.GraphObjectList; 
    import com.facebook.model.GraphUser; 
    import com.facebook.widget.LoginButton; 

    import android.app.AlertDialog; 
    import android.app.Dialog; 
    import android.app.DialogFragment; 
    import android.content.Intent; 
    import android.os.Bundle; 
    import android.support.v4.app.Fragment; 
    import android.util.Log; 
    import android.view.LayoutInflater; 
    import android.view.View; 
    import android.view.View.OnClickListener; 
    import android.view.ViewGroup; 
    import android.widget.Button; 
    import android.widget.TextView; 

    public class User_data_prompt_dialog extends Fragment { 
    private static final String TAG = "MainFragment"; 
    private UiLifecycleHelper uiHelper; 
    private TextView userInfoTextView; 

private Session.StatusCallback callback = new Session.StatusCallback() { 
    @Override 
    public void call(Session session, SessionState state, Exception exception) { 
     onSessionStateChange(session, state, exception); 
    } 
}; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    uiHelper = new UiLifecycleHelper(getActivity(), callback); 
    uiHelper.onCreate(savedInstanceState); 
} 

public View onCreateView(LayoutInflater inflater, 
     ViewGroup container, 
     Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.activity_first_dialog, container, false); 

// create manual input button 
    Button manualbutton =(Button)view.findViewById(R.id.manualinput); 
    manualbutton.setOnClickListener(new OnClickListener(){ 

      @Override 
      public void onClick(View v) { 
       // experiment, erase later. 
       Intent intent = new Intent(getActivity(), ManualDataEntry.class); 
       startActivity(intent); 

       getActivity().finish(); 
       // implement soon! 
      } 
     }); 

    // initialize authentication button and ask for permissions 
    // to access data from facebook. 
    LoginButton authButton = (LoginButton) view.findViewById(R.id.authButton); 
    authButton.setFragment(this); 
    authButton.setReadPermissions(Arrays.asList("user_location", "user_birthday", "user_likes")); 

    // Textview that displays data 
    userInfoTextView = (TextView) view.findViewById(R.id.userInfoTextView); 

    return view; 
} 
private void onSessionStateChange(Session session, SessionState state, Exception exception) { 

    if (state.isOpened()) { 
     userInfoTextView.setVisibility(View.VISIBLE); 
    } else if (state.isClosed()) { 
     userInfoTextView.setVisibility(View.INVISIBLE); 
    } 


} 

private String buildUserInfoDisplay(GraphUser user) { 
    StringBuilder userInfo = new StringBuilder(""); 

    // Example: typed access (name) 
    // - no special permissions required 
    userInfo.append(String.format("Name: %s\n\n", 
     user.getName())); 

    // Example: typed access (birthday) 
    // - requires user_birthday permission 
    userInfo.append(String.format("Birthday: %s\n\n", 
     user.getBirthday())); 

    // Example: partially typed access, to location field, 
    // name key (location) 
    // - requires user_location permission 
    userInfo.append(String.format("Location: %s\n\n", 
     user.getLocation().getProperty("name"))); 

    // Example: access via property name (locale) 
    // - no special permissions required 
    userInfo.append(String.format("Locale: %s\n\n", 
     user.getProperty("locale"))); 

    return userInfo.toString(); 
} 

private interface MyGraphLanguage extends GraphObject { 
    // Getter for the ID field 
    String getId(); 
    // Getter for the Name field 
    String getName(); 
} 

@Override 
public void onResume() { 
    super.onResume(); 


    Session session = Session.getActiveSession(); 
    if (session != null && 
      (session.isOpened() || session.isClosed())) { 
     onSessionStateChange(session, session.getState(), null); 
    } 
    uiHelper.onResume(); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    uiHelper.onActivityResult(requestCode, resultCode, data); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    uiHelper.onPause(); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    uiHelper.onDestroy(); 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    uiHelper.onSaveInstanceState(outState); 
} 
} 

回答

0

這裏有兩個型號合格證指紋,調試和發佈的。

要顯示在窗口調試證書指紋,簡單開CMD 和鍵入命令:

首先檢查Java路徑變量。

命令後改變用戶名。密鑰工具-list -v -keystore C:/Users/xxxxx/.android/debug.keystore -alias androiddebugkey

要顯示發佈證書指紋,您需要創建 發佈密鑰存儲和一旦簽署.apk文件。

1.simple找到SH-1或MD5

標誌的細齒方式的apk顯示SH-1或MD5月食。

或 2.-開放cmd並鍵入命令:密鑰工具-list -v -keystore -alias

密鑰工具-list -v -keystore C:/ release_certificate_name -alias ALIAS_NAME

其中:是密鑰庫的路徑和名稱。 是您在創建 時分配給證書的別名。

還要檢查enter link description here

+0

如果我理解你正確地,這是我應該做的:1)做我的.apk文件的簽訂出口。收集密鑰庫別名。 2)把這個放在命令中。 3)找到密鑰庫的路徑並將其粘貼到命令中。 4)找到我的openssl的地址並將其粘貼到命令中。那是對的嗎? –

+0

我不需要使用openssl。如果我的問題有幫助,那麼請接受答案。 –