アプリのバックエンドとして parse.com を使用しています。API ガイドとクイック スタート ガイドは役に立ちますが、facebook<-> ユーザー リンクを機能させることができないようです。
アプリには、2 つのサインイン ボタンがあります。1 つはユーザー番号とパスワードを入力するためのもので、もう 1 つは Facebook を使用してログインするためのものです。Facebook のログインはうまく機能し、ユーザーはアプリのソーシャル機能を使い始めることができます。問題は、電話番号とパスワードだけでログインする場合です。
リンクボタンのコードは次のとおりです。
linkUser(ParseUser.getCurrentUser());
private void linkUser(final ParseUser user) {
List<String> permissions = Arrays.asList("email", Permissions.User.ABOUT_ME);
if (!ParseFacebookUtils.isLinked(user)) {
ParseFacebookUtils.link(user, permissions, this, new SaveCallback() {
@Override
public void done(ParseException ex) {
if (ex == null) {
Log.d("MyApp", "No Exception!!");
if (ParseFacebookUtils.isLinked(user)) {
Log.d("MyApp", "Woohoo, user logged in with Facebook!");
}
} else {
Log.d("MyApp", ex.getMessage());
}
}
});
} else {
Log.d("MyApp", "user already link in with Facebook!");
}
アプリのキャッシュをクリアして新規インストールを行うと、まず Parse バックエンドで作成したダミー ユーザーでログインし、[リンク] ボタンをクリックします。logcat を確認しましたが、ユーザーがリンクされているかどうかを示すログ行が表示されません。まるで「完了」コードが起動しないかのようです。また、ログインして fbAuth データを解析して調べ、ユーザーの Facebook ID が表示されるかどうかを確認します...何も表示されません。
私が正しいことをしている/していないかもしれないことの1つは、onActivityResultメソッドにあるはずの認証ワークフローを終了することです。これを呼び出しアクティビティ (設定) に入れました。
@Override
protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == 11000) {
} else {
ParseFacebookUtils.finishAuthentication(requestCode, resultCode, data);
}
}
リンク機能についての私の理解では、通常の解析ユーザーを取得してログインし (電話番号、電子メール/パスなど)、その ParseUser をキャッシュしてから、SSO を使用して facebook にリンクし、ユーザーの facebook 資格情報を介してリンクできます。 Facebook アプリまたは Web ページのいずれかです。parsefacebookutils.link は、facebook ユーザーを parse ユーザーに関連付け、バックエンドでリンクされるようにします。そうすれば、通常のユーザーが Facebook の機能を使い始めることができます。これは正しいです?
コードを要求するのは本当に嫌いですが、誰かがこの機能を利用したことがある場合は、その方法を共有したり、私が間違っていたことを指摘したりできますか?