2016-12-26 7 views
1

私はアンドロイドのアプリでFacebookのログインを使ってログインしようとしていますが、常に無効なキーハッシュを与えています。私はFacebookの開発者サイトで指定されたコマンドを使用して、私のMac上で端子を介して適切にハッシュキーを生成してもproperly.Hereは、ログイン・アクティビティー・クラスのための私のコードで私のFacebookのアプリケーションIDを使用していますなぜFacebookのログインフラグメントは、アンドロイドに無効なキーハッシュを表示していますか?

LoginActivity.java

package com.titmus.worldscope; 

import android.content.Context; 
import android.content.Intent; 
import android.content.pm.PackageInfo; 
import android.content.pm.PackageManager; 
import android.content.pm.Signature; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Base64; 
import android.util.Log; 
import android.webkit.WebView; 
import android.widget.Toast; 

import com.facebook.AccessToken; 
import com.titmus.worldscope.model.WorldScopeUser; 
import com.titmus.worldscope.utility.WorldScopeAPIService; 
import com.titmus.worldscope.utility.WorldScopeRestAPI; 

import java.security.MessageDigest; 

import fragment.FacebookLoginFragment; 

import retrofit2.Call; 
import retrofit2.Callback; 
import retrofit2.Response; 

public class LoginActivity extends AppCompatActivity implements FacebookLoginFragment.OnFragmentInteractionListener { 

    private static final String TAG = "LoginActivity"; 
    private static final String WELCOME_GIF_LINK = "file:///android_asset/welcomeGifAssets/welcome.html"; 
    private static final String APP_SERVER_AUTH_FAILED_MSG = "Authentication with WorldScope's server has failed, please check that you have internet connections and try again."; 
    private static Context context; 
    private FacebookLoginFragment facebookLoginFragment; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_facebook_login); 

     context = this; 

     loadGifIntoWebView(); 
    } 

    @Override 
    public void onFacebookLoginSuccess(AccessToken accessToken) { 
     // Successful login -> Redirect to Main activity 
     Log.d(TAG, "Login Success!"); 
     Log.d(TAG, "AccessToken: " + accessToken.getToken()); 

     // Instantiate and make a call to login user into WorldScope servers 
     Call<WorldScopeUser> call = new WorldScopeRestAPI(context).buildWorldScopeAPIService().loginUser(new WorldScopeAPIService.LoginUserRequest(accessToken.getToken())); 
     call.enqueue(new Callback<WorldScopeUser>() { 
      @Override 
      public void onResponse(Response<WorldScopeUser> response) { 
       if(response.isSuccess()) { 
        Log.d(TAG, "Success!"); 
        Log.d(TAG, "" + response.body().toString()); 

        WorldScopeUser user = response.body(); 
        WorldScopeAPIService.setUser(user); 
        // Redirect to MainActivity if successful 
        redirectToMainActivity(); 

       } else { 
        Log.d(TAG, "Failure" + response.code() + ": " + response.message()); 
        // Logout of Facebook 
        logoutOfFacebook(); 
       } 
      } 

      @Override 
      public void onFailure(Throwable t) { 
       Log.d(TAG, "Failure: " + t.getMessage()); 
       // Logout of Facebook 
       logoutOfFacebook(); 
      } 
     }); 
    } 

    //Redirects to MainActivity 
    protected void redirectToMainActivity() { 
     Intent intent = new Intent(context, MainActivity.class); 
     intent.putExtra("activity", TAG); 
     startActivity(intent); 
    } 

    // Called to logout of Facebook when attempt to authenticate with App server fails 
    private void logoutOfFacebook() { 

     if(facebookLoginFragment == null) { 
      // Get FacebookLoginFragment if missing 
      facebookLoginFragment = (FacebookLoginFragment) getSupportFragmentManager().findFragmentById(R.id.facebookLoginButtonFragment); 
     } 

     // Toast to inform user 
     Toast toast = Toast.makeText(context, APP_SERVER_AUTH_FAILED_MSG, Toast.LENGTH_LONG); 
     toast.show(); 
     facebookLoginFragment.logoutFromFacebook(); 

    } 

    // Method to load Gif's html data into WebView 
    private void loadGifIntoWebView() { 
     WebView welcomeGifWebView = (WebView) findViewById(R.id.welcomeGifWebView); 
     welcomeGifWebView.loadUrl(WELCOME_GIF_LINK); 
    } 
} 

activity_facebook_login.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:id="@+id/loginActivity" 
    tools:context="com.titmus.worldscope.LoginActivity"> 

    <WebView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:id="@+id/welcomeGifWebView" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentTop="true" /> 

    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_above="@+id/facebookLoginButtonFragment" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="48dp"> 

     <ImageView 
      android:layout_width="32dp" 
      android:layout_height="match_parent" 
      android:id="@+id/imageView" 
      android:src="@drawable/ic_logo" 
      android:layout_alignBottom="@+id/textView4" 
      android:layout_toStartOf="@+id/textView4" 
      android:layout_marginEnd="4dp" 
      android:paddingTop="6dp" 
      android:paddingBottom="5dp" /> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      android:text="WorldScope" 
      android:id="@+id/textView4" 
      android:textColor="#ffffff" 
      android:textStyle="bold" 
      android:textSize="32sp" 
      android:layout_above="@+id/facebookLoginButtonFragment" 
      android:layout_centerHorizontal="true" /> 
    </LinearLayout> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="By logging in you agree to WorldScope&apos;s Privacy Policy and Terms of Use." 
     android:id="@+id/textView6" 
     android:textColor="#eeeeee" 
     android:textSize="14dp" 
     android:layout_marginLeft="16dp" 
     android:layout_marginRight="16dp" 
     android:textAlignment="center" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginBottom="57dp" /> 

    <fragment 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:name="fragment.FacebookLoginFragment" 
     android:id="@+id/facebookLoginButtonFragment" 
     tools:layout="@layout/fragment_facebook_login" 
     android:layout_marginBottom="14dp" 
     android:layout_above="@+id/textView6" 
     android:layout_alignParentStart="true" /> 

</RelativeLayout> 

答えて

1

CMDを使用して生成さkeyhashは、最初の罰金に動作し、それはしていません。

だからその後genratedキーハッシュをコピーしますクラス

public void printHashKey(){ 
     // Add code to print out the key hash 
     try { 
      PackageInfo info = getPackageManager().getPackageInfo(
        "net.simplifiedcoding.androidlogin", 
        PackageManager.GET_SIGNATURES); 
      for (Signature signature : info.signatures) { 
       MessageDigest md = MessageDigest.getInstance("SHA"); 
       md.update(signature.toByteArray()); 
       Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); 
      } 
     } catch (PackageManager.NameNotFoundException e) { 

     } catch (NoSuchAlgorithmException e) { 

     } 
    } 

のいずれかにkeyHashを生成するには、このメソッドを使用して、あなたはFacebookのデベロッパーコンソールでcmdで生成されたkeyhashを追加したところに貼り付けます。

Facebookのデベロッパーコンソールでアプリケーションを1つのデバイスに制限することはできません。

+0

Facebookの開発者コンソールでは、オプションが変更されています。それはもはや私にアプリケーションをライブにするオプションを与えていません –

+0

上記のgenrate hashcodeは問題ありません。コンソールに追加してください。それは – Mrinmoy

+0

はい、それを試して動作します。ちょうど私に瞬間を与える –

関連する問題