2016-05-30 125 views
-1

我試圖使用最新的facebook-sdk開發登錄和共享圖像,我成功實現了登錄,但是當我嘗試共享照片時,雖然我對publish_actions進行了檢查,但並未提示我獲得許可。錯誤出現爲(#200)需要擴展權限publish_actions ..以下是我的代碼。請幫助我什麼,我做錯了......任何幫助appreiciated ..需要擴展權限publish_actions

package com.example.sociallogin; 

import android.content.Context; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.preference.PreferenceManager; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.widget.Button; 

import com.example.sociallogin.Utility.Utils; 
import com.facebook.AccessToken; 
import com.facebook.CallbackManager; 
import com.facebook.FacebookCallback; 
import com.facebook.FacebookException; 
import com.facebook.FacebookSdk; 
import com.facebook.GraphRequest; 
import com.facebook.GraphResponse; 
import com.facebook.HttpMethod; 
import com.facebook.Profile; 
import com.facebook.appevents.AppEventsLogger; 
import com.facebook.internal.Utility; 
import com.facebook.login.LoginManager; 
import com.facebook.login.LoginResult; 

import org.json.JSONException; 
import org.json.JSONObject; 

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

public class MainActivity extends AppCompatActivity { 
    Button button, shareBtn, picPublish; 
    CallbackManager callbackManager; 
    AccessToken accessToken; 
    String name, email, first_name, last_name, gender, bday, id, profile_pic_url; 
    private ArrayList<String> picList = new ArrayList<>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     FacebookSdk.sdkInitialize(getApplicationContext()); 
     callbackManager = new CallbackManager.Factory().create(); 
     picList.add("http://placehold.it/120x120&text=image1"); 
     picList.add("http://placehold.it/120x120&text=image2"); 
     picList.add("http://placehold.it/120x120&text=image3"); 
     picList.add("http://placehold.it/120x120&text=image4"); 
     //AppEventsLogger.activateApp(this); 
     button = (Button) findViewById(R.id.btn_login); 
     shareBtn = (Button) findViewById(R.id.btn_share); 
     picPublish = (Button) findViewById(R.id.pic_publish); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       loginwithFb(); 
      } 
     }); 


    } 

    private void loginwithFb() { 
     LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "email", "user_actions.fitness")); 
     LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(final LoginResult loginResult) { 
       Utils.showToast(MainActivity.this, "Succes"); 
       accessToken = loginResult.getAccessToken(); 

       GraphRequest graphRequest = GraphRequest.newMeRequest(accessToken, new GraphRequest.GraphJSONObjectCallback() { 
        @Override 
        public void onCompleted(JSONObject object, GraphResponse response) { 
         try { 
          String email = object.getString("email"); 
          name = object.getString("name"); 
          first_name = object.optString("first_name"); 
          last_name = object.optString("last_name"); 
          gender = object.getString("gender"); 
          //bday=object.getString("birthday"); 
          id = object.getString("id"); 
          profile_pic_url = "https://graph.facebook.com/" + id + "/picture?type=large"; 
          Utils.showToast(MainActivity.this, first_name); 
          /*Profile profile=Profile.getCurrentProfile(); 
          profile.getProfilePictureUri(200,200);*/ 
          Log.i("info", "Email id is" + email); 
          Log.i("info", "First Name is " + first_name); 
          Log.i("info", "Last Name is " + last_name); 
          Log.i("info", "Gender is" + gender); 
          //Log.i("info","Birth Date is"+ bday); 
          Log.i("info", "Id is " + id); 
          Log.i("info", "Url is " + profile_pic_url); 
          shareBtn.setVisibility(View.VISIBLE); 
          picPublish.setVisibility(View.VISIBLE); 
          /* shareBtn.setOnClickListener(new View.OnClickListener() { 
           @Override 
           public void onClick(View v) { 
            shareOnFacebook(accessToken);        } 
          });*/ 
          picPublish.setOnClickListener(new View.OnClickListener() { 
           @Override 
           public void onClick(View v) { 
            sharePicture(accessToken); 
           } 
          }); 

         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
        } 
       }); 
       Bundle parameters = new Bundle(); 
       parameters.putString("fields", "id,name,first_name,last_name,email,birthday,gender"); 
       graphRequest.setParameters(parameters); 
       graphRequest.executeAsync(); 


      } 

      @Override 
      public void onCancel() { 
       Utils.showToast(MainActivity.this, "User Cancelled Login"); 

      } 

      @Override 
      public void onError(FacebookException error) { 
       Log.d("error", error.toString()); 
      } 
     }); 
    } 

    private void sharePicture(AccessToken accessToken) { 
     Set<String> permissions = accessToken.getDeclinedPermissions(); 
     if (permissions.contains("publish_actions")) { 
      LoginManager.getInstance().logInWithPublishPermissions(
        MainActivity.this, 
        Arrays.asList("publish_actions")); 
     } else { 
      for (int i = 0; i < picList.size(); i++) { 
       Bundle params = new Bundle(); 
       params.putString("message", first_name + last_name + "shared this"); 
       params.putString("url", picList.get(i)); 

       new GraphRequest(
         AccessToken.getCurrentAccessToken(), 
         "/me/photos", 
         params, 
         HttpMethod.POST, 
         new GraphRequest.Callback() { 
          public void onCompleted(GraphResponse response) { 
           if (response.getError() != null) { 
            Utils.showToast(MainActivity.this, response.getError().getErrorMessage()); 
           } else { 
            Utils.showToast(MainActivity.this, "pictures shared"); 
           } 
          } 
         } 
       ).executeAsync(); 
      } 
     } 
    } 

    private void shareOnFacebook(AccessToken accessToken) { 
     Set<String> permissions = accessToken.getDeclinedPermissions(); 
     if (permissions.contains("publish_actions")) { 

     } else { 
      Bundle params = new Bundle(); 
      params.putString("course", "http://samples.ogp.me/136756249803614"); 
      new GraphRequest(
        AccessToken.getCurrentAccessToken(), 
        "/me/fitness.bikes", 
        params, 
        HttpMethod.POST, 
        new GraphRequest.Callback() { 
         public void onCompleted(GraphResponse response) { 
          if (response.getError() != null) { 
           Utils.showToast(MainActivity.this, response.getError().getErrorMessage()); 
          } else { 
           Utils.showToast(MainActivity.this, "Shared"); 
          } 
         } 
        } 
      ).executeAsync(); 

     } 

    } 


    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     callbackManager.onActivityResult(requestCode, resultCode, data); 
    } 
} 
+0

你想用應用程序管理員嗎? – luschn

+0

nope我成功地使用我自己的帳戶分享了圖片,但其他帳戶失敗.. @ luschn –

+0

好的,那麼只有一個答案,會在一分鐘內添加。 – luschn

回答

1

你提到你已經使用自己的帳戶成功,但是失敗了另一個。在上市之前,大多數權限(包括publish_actions)都需要通過Facebook進行審覈。閱讀關於登錄審查文檔:https://developers.facebook.com/docs/facebook-login/review

順便說一句,當您授權具有擴展權限的應用程序作爲應用程序管理員應該有關於此警告。

+0

我不能理解..當你授權一個具有擴展權限的應用程序作爲應用程序管理員時,應該有一個警告。 –

+0

在登錄彈出窗口中,通常會有一個警告。無論哪種方式,請閱讀有關登錄審查的內容,如果它與您自己的用戶協同工作,但與其他用戶協同工作,則無疑是個問題。 – luschn

+0

雅我高壓彈出,但只有一次.. –

相關問題