2013-08-26 43 views
1

我正在開發一個Windows Phone應用程序,我必須將照片發佈到Facebook。並且通過使用PhotoChooserTask或CameraChooserTask來選擇該特定照片。如何將圖像上載到在Windows Phone 8中使用photoChooserTask選擇的Facebook?

通常情況下,我可以成功發佈特定照片,但是我正面臨發佈所選照片的​​問題。我看到一些鏈接,如 link

所以,如果有人知道這個問題,請幫助我。 Thanx提前。

編輯

private void PostClicked(object sender, RoutedEventArgs e) 
    { 
     //Client Parameters 
     var parameters = new Dictionary<string, object>(); 
     //var parameters1 = new Dictionary<>(); 
     parameters["client_id"] = FBApi; 
     parameters["redirect_uri"] = "https://www.facebook.com/connect/login_success.html"; 
     parameters["response_type"] = "token"; 
     parameters["display"] = "touch"; 
     parameters["ContentType"] = "image/png"; 
     //The scope is what give us the access to the users data, in this case 
     //we just want to publish on his wall 
     parameters["scope"] = "publish_stream"; 
     Browser.Visibility = System.Windows.Visibility.Visible; 
     Browser.Navigate(client.GetLoginUrl(parameters)); 
    } 
private void BrowserNavitaged(object sender, System.Windows.Navigation.NavigationEventArgs e) 
    { 
     FacebookOAuthResult oauthResult; 
     //Making sure that the url actually has the access token 
     if (!client.TryParseOAuthCallbackUrl(e.Uri, out oauthResult)) 
     { 
      return; 
     } 
     //Checking that the user successfully accepted our app, otherwise just show the error 
     if (oauthResult.IsSuccess) 
     { 
      //Process result 
      client.AccessToken = oauthResult.AccessToken; 
      //Hide the browser 
      Browser.Visibility = System.Windows.Visibility.Collapsed; 
      PostToWall(); 
     } 
     else 
     { 
      //Process Error 
      MessageBox.Show(oauthResult.ErrorDescription); 
      Browser.Visibility = System.Windows.Visibility.Collapsed; 
     } 
    } 
private void PostToWall() 
    { 
     string imageName = "ic_launcher.png"; 
     StreamResourceInfo sri = null; 
     Uri jpegUri = new Uri(imageName, UriKind.Relative); 
     sri = Application.GetResourceStream(jpegUri); 
     try 
     { 
      byte[] imageData = new byte[sri.Stream.Length]; 
      sri.Stream.Read(imageData, 0, System.Convert.ToInt32(sri.Stream.Length)); 
      FacebookMediaObject fbUpload = new FacebookMediaObject 
      { 
       FileName = imageName, 
       ContentType = "image/jpg" 
      }; 
      fbUpload.SetValue(imageData); 
      string name1 = eventname.Text; 
      string format = "yyyy-MM-dd"; 
      string message1 = eventmessage.Text; 
      string date1 = datepicker.ValueString; 
      DateTime datevalue = DateTime.Parse(date1); 
      string d = datevalue.ToString(format); 
      string memoType = "Tribute"; 
      var parameters = new Dictionary<string, object>(); 
      var parameters1 = new Dictionary<string, object>(); 
      parameters["message"] = name1 + "\n" + d + "\n" + memoType + "\n" + message1; 
      parameters["source"] = fbUpload; 

      webservice(); 
      client.PostTaskAsync("me/photos", parameters); 
     } 
     catch (Exception error) 
     { 
      MessageBox.Show(error.ToString()); 
     } 

     //client.PostTaskAsync("me/photos", parameters1); 
    } 

在點擊一個按鈕,我打電話PostClicked類,它會直接進入Facebook的炫魅,它會要求登錄信息。像我這樣做。 請檢查出來

+0

在這段代碼中,我硬編碼的圖像的名字,我在Facebook的照片進行更新。但我不希望硬編碼,我的要求是從相機或手機庫中選擇一個圖像。 –

回答

2

現在我可以通過使用photochoosertask或cameratask成功地將照片分享到Facebook。 我分享我的經驗,如果任何人面臨同樣的問題可以使用它。

private void photoChooserTask_Completed(object sender, PhotoResult e) 
    { 
     BitmapImage image = new BitmapImage(); 
     image.SetSource(e.ChosenPhoto); 
     SaveImageToIsolatedStorage(image, tempJPEG); 
     this.image.Source = image; 
    } 
public void SaveImageToIsolatedStorage(BitmapImage image, string fileName) 
    { 
     using (var isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
     { 
      if (isolatedStorage.FileExists(fileName)) 
       isolatedStorage.DeleteFile(fileName); 
      var fileStream = isolatedStorage.CreateFile(fileName); 
      if (image != null) 
      { 
       var wb = new WriteableBitmap(image); 
       wb.SaveJpeg(fileStream, wb.PixelWidth, wb.PixelHeight, 0, 100); 
      } 
      fileStream.Close(); 
     } 
    } 

使用此功能,您可以將所選圖像保存到IsolatedStorage。 然後在張貼照片到臉書時,您必須從IsolatedStorage中選擇圖像。

private void PostClicked(object sender, RoutedEventArgs e) 
    { 
     //Client Parameters 
     var parameters = new Dictionary<string, object>(); 
     parameters["client_id"] = FBApi; 
     parameters["redirect_uri"] = "https://www.facebook.com/connect/login_success.html"; 
     parameters["response_type"] = "token"; 
     parameters["display"] = "touch"; 
     //The scope is what give us the access to the users data, in this case 
     //we just want to publish on his wall 
     parameters["scope"] = "publish_stream"; 
     Browser.Visibility = System.Windows.Visibility.Visible; 
     Browser.Navigate(client.GetLoginUrl(parameters)); 
    } 
private void BrowserNavitaged(object sender, System.Windows.Navigation.NavigationEventArgs e) 
    { 
     FacebookOAuthResult oauthResult; 
     //Making sure that the url actually has the access token 
     if (!client.TryParseOAuthCallbackUrl(e.Uri, out oauthResult)) 
     { 
      return; 
     } 
     //Checking that the user successfully accepted our app, otherwise just show the error 
     if (oauthResult.IsSuccess) 
     { 
      //Process result 
      client.AccessToken = oauthResult.AccessToken; 
      //Hide the browser 
      Browser.Visibility = System.Windows.Visibility.Collapsed; 
      PostToWall(); 
     } 
     else 
     { 
      //Process Error 
      MessageBox.Show(oauthResult.ErrorDescription); 
      Browser.Visibility = System.Windows.Visibility.Collapsed; 
     } 
    } 
private void PostToWall() 
    { 
     try 
     { 
      byte[] data; 
      using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) 
      { 
       using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile(tempJPEG, FileMode.Open, FileAccess.Read)) 
       { 
        data = new byte[fileStream.Length]; 
        fileStream.Read(data, 0, data.Length); 
        fileStream.Close(); 
       } 
      } 
      //MemoryStream ms = new MemoryStream(data); 
      //BitmapImage bi = new BitmapImage(); 
      //// Set bitmap source to memory stream 
      //bi.SetSource(ms); 
      //this.imageTribute.Source = bi; 
      FacebookMediaObject fbUpload = new FacebookMediaObject 
      { 
       FileName = tempJPEG, 
       ContentType = "image/jpg" 
      }; 
      fbUpload.SetValue(data); 
      string name1 = eventname.Text; 
      string format = "yyyy-MM-dd"; 
      string message1 = eventmessage.Text; 
      string date1 = datepicker.ValueString; 
      DateTime datevalue = DateTime.Parse(date1); 
      string d = datevalue.ToString(format); 
      string memoType = "Notice"; 
      var parameters = new Dictionary<string, object>(); 
      var parameters1 = new Dictionary<string, object>(); 
      parameters["message"] = name1; 
      parameters["source"] = fbUpload; 
      webservice(); 
      client.PostTaskAsync("me/photos", parameters); 

     } 
     catch (Exception error) 
     { 
      MessageBox.Show(error.ToString()); 
     } 
    } 

感謝名單向所有....

0

,你可以做到這一點的方法有兩種:

1)通過使用mediasharetask中,它會顯示ü所有共享賬號到您的手機同步,如Facebook,Gmail時,linkdin,嘰嘰喳喳,等等:它可以像這樣使用。

  ShareMediaTask shareMediaTask = new ShareMediaTask(); 
      shareMediaTask.FilePath = path; 
      shareMediaTask.Show(); 

2)通過使用Facebook sdk。你可以從nuget manager獲得包,然後你可以使用它在facebook上分享。

我希望這可以幫助你。

+0

但爲此,我認爲用戶應該在他的手機中安裝了facebook。否則它不會顯示。 –

+0

對於第一種情況,用戶應該在他的手機中同步Facebook,但第二個用戶會要求用戶進行身份驗證。 –

+0

第二種方法,你可以檢查這個問題http://stackoverflow.com/questions/14053346/upload-image-with-facebook-status-wp8 –

相關問題