linvi / tweetinvi

Tweetinvi, an intuitive Twitter C# library for the REST and Stream API. It supports .NET, .NETCore, UAP (Xamarin)...
MIT License
1.01k stars 220 forks source link

.NET MAUI Blazor Hybrid (.NET 7) / TweetinviAPI 5.0.4 - Error - Operation is not supported on this platform #1206

Open seanrco opened 1 year ago

seanrco commented 1 year ago

I am working on a .NET MAUI Blazor Hybrid (.NET 7) mobile app and using TweetinviAPI 5.0.4. When I test my app locally on my iPhone iOS (16.0.3) it is not working and get the following stack trace error:

[0:] TwitterService.GetTimelineAsync - Error - Operation is not supported on this platform.   at System.Net.Http.NSUrlSessionHandler.set_Proxy(IWebProxy value)
   at System.Net.Http.HttpClientHandler.InvokeNativeHandlerMethod(String name, Object[] parameters)
   at System.Net.Http.HttpClientHandler.SetProxy(IWebProxy value)
   at System.Net.Http.HttpClientHandler.set_Proxy(IWebProxy value)
   at Tweetinvi.WebLogic.TwitterClientHandler.set_TwitterQuery(ITwitterQuery value)
   at Tweetinvi.WebLogic.HttpClientWebHelper.GetHttpClient(ITwitterQuery twitterQuery, ITwitterClientHandler twitterHandler)
   at Tweetinvi.WebLogic.HttpClientWebHelper.GetHttpResponseAsync(ITwitterQuery twitterQuery, ITwitterClientHandler handler)
   at Tweetinvi.WebLogic.WebRequestExecutor.<>c__DisplayClass4_0.<<ExecuteQueryAsync>b__0>d.MoveNext()
--- End of stack trace from previous location ---
   at Tweetinvi.WebLogic.WebRequestExecutor.<ExecuteTwitterQuerySafelyAsync>d__7`1[[Tweetinvi.Core.Web.ITwitterResponse, Tweetinvi.Core, Version=5.0.4.0, Culture=neutral, PublicKeyToken=null]].MoveNext()
   at Tweetinvi.WebLogic.TwitterRequestHandler.ExecuteQueryAsync(ITwitterRequest request)
   at Tweetinvi.Credentials.TwitterAccessor.<ExecuteRequestAsync>d__4`1[[Tweetinvi.Models.DTO.ITweetDTO[], Tweetinvi.Core, Version=5.0.4.0, Culture=neutral, PublicKeyToken=null]].MoveNext()
   at Tweetinvi.Core.Iterators.TwitterPageIterator`2.<NextPageAsync>d__12[[Tweetinvi.Core.Web.ITwitterResult`1[[Tweetinvi.Models.DTO.ITweetDTO[], Tweetinvi.Core, Version=5.0.4.0, Culture=neutral, PublicKeyToken=null]], Tweetinvi.Core, Version=5.0.4.0, Culture=neutral, PublicKeyToken=null],[System.Nullable`1[[System.Int64, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
   at Tweetinvi.Core.Iterators.TwitterIteratorProxy`3.<NextPageAsync>d__12[[Tweetinvi.Core.Web.ITwitterResult`1[[Tweetinvi.Models.DTO.ITweetDTO[], Tweetinvi.Core, Version=5.0.4.0, Culture=neutral, PublicKeyToken=null]], Tweetinvi.Core, Version=5.0.4.0, Culture=neutral, PublicKeyToken=null],[Tweetinvi.Models.ITweet, Tweetinvi.Core, Version=5.0.4.0, Culture=neutral, PublicKeyToken=null],[System.Nullable`1[[System.Int64, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
   at Tweetinvi.Client.TimelinesClient.GetUserTimelineAsync(IGetUserTimelineParameters parameters)

My Service code example that is called when error occurs:

using System.Diagnostics;
using Tweetinvi;
using Tweetinvi.Models;

namespace FooMobileApp.Services;

public class TwitterService
{

    private readonly string TWITTER_API_KEY = "######";
    private readonly string TWITTER_API_SECRET = "######";
    private readonly string TWITTER_API_TOKEN = "######";
    private readonly string TIMELINE_USER = "foo"; // note this is made up for code example

    TwitterClient twitterClient;

    public TwitterService()
    {
        this.twitterClient = new TwitterClient(TWITTER_API_KEY, TWITTER_API_SECRET, TWITTER_API_TOKEN);
    }

    public async Task<ITweet[]> GetTimelineAsync(int numTweets = 25)
    {
        ITweet[] tweets = null;

        try
        {
            tweets = await twitterClient.Timelines.GetUserTimelineAsync(TIMELINE_USER);

            if (tweets != null && tweets.Length > 0)
            {
                tweets = tweets.Take(numTweets).ToArray();
            }
        }
        catch (Exception ex)
        {
            Debug.WriteLine("TwitterService.GetTimelineAsync - Error - " + ex.Message + ex.StackTrace);
        }

        return tweets;
    }

}

Any suggestions?