1

Facebookに写真を投稿する必要があるWindows Phoneアプリを開発しています。その特定の写真は、PhotoChooserTask または CameraChooserTask を使用して選択されます。

通常、特定の写真を正常に投稿できますが、選択した写真を投稿する際に問題が発生します。リンクのようなリンクを見ました

誰かが問題について知っているなら、私を助けてください。事前にサンクス。

編集

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 のメインページに直接移動し、ログイン情報が要求されます。このように私はやっています。チェックアウトしてください

4

2 に答える 2

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に保存できます。そして、写真を Facebook に投稿するときに、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());
        }
    }

皆様に感謝....

于 2013-08-27T06:36:58.077 に答える
0

あなたは2つの方法でそれを行うことができます:

1) mediasharetask を使用すると、facebook、gmail、linkdin、twitter など、携帯電話が同期されているすべての共有アカウントが表示されます。このように使用できます。

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

2) Facebook SDK を使用する。nuget マネージャーからパッケージを取得し、それを使用して Facebook で共有できます。

これがあなたを助けることを願っています。

于 2013-08-26T11:18:13.600 に答える