私はアンドロイドのアプリで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'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>
Facebookの開発者コンソールでは、オプションが変更されています。それはもはや私にアプリケーションをライブにするオプションを与えていません –
上記のgenrate hashcodeは問題ありません。コンソールに追加してください。それは – Mrinmoy
はい、それを試して動作します。ちょうど私に瞬間を与える –