在 Xamarin.Forms 应用程序中嵌入 PowerBI 报告

问题描述

美好的一天。我在我制作的 Xamarin.Forms 应用程序中显示 PowerBi 报告时遇到问题(此处为 PBI 新手)。我只需要查看报告,我不必编辑内容。我获得了访问令牌,然后我做了一个 GET 请求,并从 PowerBi 获得了嵌入的 url,我在 WebView.source 中使用它在屏幕上显示。它加载到该报告,但它说我无权查看我应该拥有的报告(我用于令牌的用户是 PBI PRO 用户)。我得到的文本是“要查看此报告,请向作者请求访问权限”。这是令牌POST代码

string url = "https://login.microsoftonline.com/<pbi_tenant_id>/oauth2/token";

                    IEnumerable<keyvaluePair<string,string>> parameters = new List<keyvaluePair<string,string>>()
                    {
                        new keyvaluePair<string,string>("name","testName"),new keyvaluePair<string,string>("grant_type","password"),string>("scope","openid"),string>("resource","https://analysis.windows.net/powerbi/api"),string>("client_id","<client_id>"),string>("username","<pro_user>"),string>("password","<password>"),string>("client_secret","<client_secret>")
                        };
HttpContent content = new FormUrlEncodedContent(parameters);

在这一切之后,我得到了我的令牌,并使用该令牌发出了 GET 请求以获取嵌入的 url

using (HttpResponseMessage response = await client.PostAsync(url,content))
                    {
                        if (response.IsSuccessstatusCode)
                        {
                            using (HttpContent contentOfReponse = response.Content)
                            {
                                try
                                {
                                    string tokenResponseJSON = await contentOfReponse.ReadAsstringAsync(); //token in json format that I needed to convert to string in next line
                                    var tokenRepsonse = JsonConvert.DeserializeObject<TokenInfoModel>(tokenResponseJSON);

                                    string accesstoken = tokenRepsonse.access_token; //my string token

                                    try
                                    {
                                        string pbiUrl = "https://api.powerbi.com/v1.0/myorg/reports/<company_report_id>";
                                        
                                        client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer",accesstoken); //Authorization of request 
                                        

                                        var response2 = await client.GetStringAsync(pbiUrl);

                                        var rese = JsonConvert.DeserializeObject<PBIRepost>(response2);
                                        PbiEmbedUrl = rese.embedUrl + "&autoAuth=true" + "&isOwnedByMe=" + rese.isOwnedByMe + "apps/<app_id>";
                                        RaisePropertyChanged(PbiEmbedUrl); 
                                    }
                                    catch (Exception ex)
                                    {

                                        //await App.Current.MainPage.displayAlert();
                                    }   
                                }
                                catch (Exception)
                                {
                                    //await App.Current.MainPage.displayAlert();
                                }
                            }
                        }
                        else
                        {
                            //await App.Current.MainPage.displayAlert();
                        }
                    }

所有这些都有效,我得到了 url 并在打开到 PBI 网站的 WebView 中使用它,但显示“要查看此报告,请询问作者访问权限”。 现在可能非常重要的事情是,在我的手机上,我不是专业的 PBI 用户,但这应该不是问题,因为我使用 PBI PRO 用户作为令牌。如果这是一个问题,如果不是 PRO 用户,我怎么能做到这一点?

嵌入URL我是: https://app.powerbi.com/reportEmbed?reportId= &配置= VST1BFLUItUFJeyJjbHVzdGVy5ldCIsImVtYmVkrmllZFRlbGVtZXWRpcmVjdC5hbmFseXNpcy53aW5kb3dzLm5ldCIsImVtYmVkRmVhdHVyZXMiOnsibRyeHVzdGVyVXJsIjoiaHR0cUVtYmVkIjp0cnVlfX0%3D“(不是一个真正的配置串,不知道我可以共享真实的,所以我做起来对于这个问题)

我没有弄乱嵌入 url 中的配置,所以这也可能是问题所在,但我不知道如何编辑配置。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)