2

アプリケーションのユーザーに、Facebook アカウントを使用してアプリケーションにログインするオプションを提供したいと考えています。そして、以下のコードを使用してそれを行うことができます。

String[] permissions = { "offline_access", "publish_stream", "user_photos", "publish_checkins", "photo_upload" };
mFacebook.authorize(FacebookLogin.this, permissions, new LoginDialogListener());

public final class LoginDialogListener implements DialogListener {
    public void onComplete(Bundle values) {
        new MyAsyncGetJsonFromFacebbok(FacebookLogin.this).execute();
    }

    public void onFacebookError(FacebookError error) {
        Toast.makeText(FacebookLogin.this, "Something went wrong. Please try again.", Toast.LENGTH_LONG).show();
        Log.v("onFacebookError FacebookLogin", error.toString());
    }

    public void onError(DialogError error) {
        Toast.makeText(FacebookLogin.this, "Something went wrong. Please try again.", Toast.LENGTH_LONG).show();
        Log.v("onError FacebookLogin", error.toString());
    }

    public void onCancel() {
        Toast.makeText(FacebookLogin.this, "Something went wrong. Please try again.", Toast.LENGTH_LONG).show();
    }

    public class MyAsyncGetJsonFromFacebbok extends AsyncTask<Void, Void, JSONObject> {
        Context context;
        JSONObject jsonObj = null;

        public MyAsyncGetJsonFromFacebbok(Context context_) {
            this.context = context_;
        }

        @Override
        protected JSONObject doInBackground(Void... params) {
            try {
                jsonObj = com.facebook.android.Util.parseJson(mFacebook.request("me"));
            } catch (FacebookError e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return jsonObj;
        }

        @Override
        protected void onPostExecute(JSONObject jsonObj) {
            try {
                String facebookID = jsonObj.getString("id");
                String firstName = jsonObj.getString("first_name");
                String lastName = jsonObj.getString("last_name");
                Toast.makeText(FacebookLogin.this, "Thank you for Logging In, " + firstName + " " + lastName + "!", Toast.LENGTH_SHORT)
                        .show();
                SessionStore.save(mFacebook, FacebookLogin.this);
                storeDataInSharedPreferrence(facebookID, firstName, lastName);
                sendInvitationToFriends(facebookID);
                startNextActivity();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

今、私はすべての Facebook の友達に私の Android アプリケーションに参加するよう招待しようとしています。そのために、このリンクからコードを試し、Facebook の友達に私のウェブサイトに参加するよう招待状を送信し、そのコードを修正しました (機能していなかったため)。コードは次のとおりです。

String response = mFacebook.request((userID == null) ? "me" : userID);
            Bundle params = new Bundle();

            params.putString("message", "msg");
            params.putString(mFacebook.getAccessToken(), "msg");

            params.putByteArray("message", "message goes here".getBytes());
            params.putByteArray("link", "http://mysite.com".getBytes());
            params.putByteArray("caption", "Click the link".getBytes());
            params.putByteArray("description", "description of link".getBytes());
            params.putByteArray("name", "name of link".getBytes());
            params.putByteArray("picture", "http://url.to.my.picture/pic.jpg".getBytes());

            response = mFacebook.request(((userID == null) ? "me" : userID) + "/feed", params, "POST");

しかし、そのエラーを与える

12-03 19:46:04.552: D/Tests(873): {"error":{"message":"(#100) Missing message or attachment","type":"OAuthException","code":100}}

ですから、このエラーを取り除くのを手伝ってください。

4

1 に答える 1

0

なぜparams.putByteArrayテキストフィールドに使用しているのですか? 「写真」欄の件、了解しました。しかし、params.putString「メッセージ」、「リンク」、「キャプション」、「説明」、および「名前」フィールドは単純なもので十分です。

また、「メッセージ」パラメーターを 2 回渡しています。ここに来たら:params.putString("message", "msg");

そして別のここ:params.putByteArray("message", "message goes here".getBytes());

コードは基本的に次のようになります。

Bundle params = new Bundle();
params.putString("message", "msg");
params.putString(mFacebook.getAccessToken(), "msg");

params.putString("message", "message goes here".getBytes()); // CHOOSE FROM EITHER THE ONE ON THIS LINE OR THIS ONE: params.putString("message", "msg");
params.putString("link", "http://mysite.com".getBytes());
params.putString("caption", "Click the link".getBytes());
params.putString("description", "description of link".getBytes());
params.putString("name", "name of link".getBytes());
params.putByteArray("picture", "http://url.to.my.picture/pic.jpg".getBytes());

私は自分のアプリにまったく同じコードを (まあ、ほとんどとにかく) 使用していますが、問題なく動作します。そうは言っても、これについてはよくわかりません:params.putByteArray("picture", "http://url.to.my.picture/pic.jpg".getBytes());

ギャラリーまたはカメラからのみ写真をアップロードします。

于 2012-12-03T15:07:29.500 に答える