2016-06-21 4 views
0

Я бы создал сообщение с фотографией и заголовком в своем приложении и разместил его на моем facebook. Я не знаю точно, какие шаги необходимы, поэтому я не знаю, что я делаю неправильно. Основное действие имеет в своем xml LoginButton и ShareButton. я сделал:Сообщение facebook android

public class MainActivity extends AppCompatActivity { 
private static final String TAG = "MainActivity"; 
public DBhelper database; 
public CallbackManager callbackManager; 
public ShareDialog shareDialog; 
public ShareButton shareButton; 
public SharePhotoContent sharePhotoContent; 

}

этого класса:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    FacebookSdk.sdkInitialize(getApplicationContext()); 
    AppEventsLogger.activateApp(this); 
    callbackManager = CallbackManager.Factory.create(); 
    shareDialog = new ShareDialog(this); 
    shareButton=new ShareButton(this); 

    setContentView(R.layout.activity_main); 

    LoginButton loginButton = (LoginButton) findViewById(R.id.login_button); 
    loginButton.setReadPermissions("user_friends","public_profile"); 
    get_login_details(loginButton); 

    shareButton=(ShareButton) findViewById(R.id.share_button); 
    sharePhotoContent=genera_share_photo_content(); 
    shareButton.setShareContent(sharePhotoContent); 

}

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    callbackManager.onActivityResult(requestCode,resultCode,data); 
    Log.e(TAG,data.toString()); 

}

И эти два метода:

protected void get_login_details(LoginButton loginButton) { 
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      // App code 
      Toast.makeText(getApplicationContext(),"SI",Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onCancel() { 
      // App code 
      Toast.makeText(getApplicationContext(),"CANCEL",Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      // App code 
      Toast.makeText(getApplicationContext(),"NO",Toast.LENGTH_LONG).show(); 
     } 
    }); 

}

public SharePhotoContent genera_share_photo_content() { 
    //code... 
    Bitmap image = ... 

    SharePhoto photo = new SharePhoto.Builder() 
      .setBitmap(image) 
      .build(); 
    SharePhotoContent content = new SharePhotoContent.Builder() 
      .addPhoto(photo) 
      .build(); 
    return content; 

}

Теперь, содержание доли цветовой в начале: я бы сделать его динамическим, используя genera_share_photo_content(): как я могу изменить его, когда я хочу? Должен ли я позвонить где-нибудь shareDialog.show(content) или ShareApi.share(content,null)? Это разрешение user_friends и public_profile, которое я установил для кнопки входа. достаточно, чтобы все работало?

ответ

1

вы должны добавить разрешение, представляющее собой:

"publish_actions" 

и в манифесте, вы должны включить эти теги

<meta-data 
     android:name="com.facebook.sdk.ApplicationId" 
     android:value="@string/facebook_app_id" /> 
    <provider 
     android:name="com.facebook.FacebookContentProvider" 
     android:authorities="com.facebook.app.FacebookContentProvider1618161851808217" 
     android:exported="true" /> 
    <activity 
     android:name="com.facebook.FacebookActivity" 
     android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Translucent.NoTitleBar" /> 

это сделать:

private void sharePhotoToFacebook(){ 

    String filePath = "path to your image"; 
    String text = "your custom text"; 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
    Bitmap bitmap = BitmapFactory.decodeFile(filePath, options); 
     SharePhoto photo = new SharePhoto.Builder() 
       .setBitmap(bitmap) 
       .setCaption(text) 
       .build(); 

     SharePhotoContent content = new SharePhotoContent.Builder() 
       .addPhoto(photo) 
       .setContentUrl(Uri.parse(text)) 
       .build(); 
    ShareApi.share(content,null); 
    Toast.makeText(getApplicationContext(),"Snapshot shared On Facebook",Toast.LENGTH_SHORT).show(); 

} 

public void publishimage() { 
    Log.i("Android","publishing Image"); 
    FacebookSdk.sdkInitialize(getApplicationContext()); 

    callbackManager = CallbackManager.Factory.create(); 

    shareDialog = new ShareDialog(this); 
    java.util.List<String> permissionNeeds = Arrays.asList("publish_actions"); 

    //this loginManager helps you eliminate adding a LoginButton to your UI 
    manager = LoginManager.getInstance(); 

    manager.logInWithPublishPermissions(this, permissionNeeds); 

    manager.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      sharePhotoToFacebook(); 
     } 

     @Override 
     public void onCancel() { 
      System.out.println("onCancel"); 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      System.out.println("onError"); 
     } 
    }); 

} 

и нажатием кнопки то есть:

btnshare.setOnclicklistener(new View.OnclickListener){ 
    @Override 
    public void onClick(View V){ 
     publishimage(); 
    } 
} 
+0

Как я могу добавить это разрешение? Использование LoginButton.setReadPermission() или LoginButonn.setPublishPermissions()? – SctALE

+0

замените эту строку в вашем коде: 'loginButton.setReadPermissions (« user_friends »,« public_profile »);' с 'loginButton.setReadPermissions (" publish_actions ");' – Ashwani

+0

прочитайте этот блог, это поможет вам понять: http: // simpledeveloper.com/how-to-share-an-image-on-facebook-in-android/ – Ashwani