Facebook分享到ios.Xamarin

时间:2017-02-20 16:40:03

标签: facebook sdk xamarin.ios facebook-share

我试图在我的小xamarin iOS应用程序中实现Facebook共享功能。我已经从nuget下载了最新版本的 Facebook iOS SDK ,但我不知道如何使用它。有没有人已经这样做了,所以他可以给我一些正常的信息吗? 在之前非常感激:)

1 个答案:

答案 0 :(得分:0)

我已经为twitter和fb实现了分享。

iOS版

您可以使用ios的本地社交服务进行共享,如果没有可用的话 OAuth2Authenticator获取访问令牌,然后使用FB graph

发布
public void ShareViaSocial(string serviceType, string urlToShare)
        {
            socialKind = serviceType == "Twitter" ? SLServiceKind.Twitter : SLServiceKind.Facebook;

            if (SLComposeViewController.IsAvailable(socialKind))
            {
                _socialComposer = serviceType == "Twitter" ? SLComposeViewController.FromService(SLServiceType.Twitter) : SLComposeViewController.FromService(SLServiceType.Facebook);
                _socialComposer.AddUrl(new Uri(urlToShare));

                viewController.PresentViewController(_socialComposer, true, () =>
                {
                    _socialComposer.CompletionHandler += (result) =>
                    {
                        Device.BeginInvokeOnMainThread(() =>
                        {
                            viewController.DismissViewController(true, null);

                            if (result == SLComposeViewControllerResult.Done)
                            { OnShare(this, ShareStatus.Successful); }
                            else
                            { OnShare(this, ShareStatus.NotSuccessful); }
                        });
                    };

                });
            }

            //If user doest have fb app and no credential for social services we use fb graph
            else if (socialKind == SLServiceKind.Facebook)
            {
                var auth = new OAuth2Authenticator(
                clientId: SharedConstants.FacebookLiveClientId,
                scope: SharedConstants.FacebookScopes,
                authorizeUrl: new Uri(SharedConstants.FacebookAuthorizeUrl),
                redirectUrl: new Uri(SharedConstants.FacebookRedirectUrl));
                viewController.PresentViewController((UIViewController)auth.GetUI(), true, null);
                auth.AllowCancel = true;
                auth.Completed += (s, e) =>
                {
                    //hide the webpage after completed login
                    viewController.DismissViewController(true, null);
                    // We presented the UI, so it's up to us to dimiss it on iOS.


                    if (e.IsAuthenticated)
                    {
                        Account fbAccount = e.Account;
                        Dictionary<string, string> dictionaryParameters = new Dictionary<string, string>() { { "link", urlToShare } };
                        var requestUrl = new Uri("https://graph.facebook.com/me/feed");
                        var request = new OAuth2Request(SharedConstants.requestMethodPOST, requestUrl, dictionaryParameters, fbAccount);

                        request.GetResponseAsync().ContinueWith(this.requestResult);
                    }
                    else { OnShare(this, ShareStatus.NotSuccessful); }
                };
                auth.Error += Auth_Error;
            }
            //If user doest have twitter app and no credential for social services we use xanarub auth for token and call twitter api for sending tweets

            else
            {
                var auth = new OAuth1Authenticator(
                               SharedConstants.TwitterConsumerKey,
                               SharedConstants.TwitterConsumerSecret,
                               new Uri(SharedConstants.TwitterRequestUrl),
                               new Uri(SharedConstants.TwitterAuth),
                               new Uri(SharedConstants.TwitterAccessToken),
                               new Uri(SharedConstants.TwitterCallBackUrl));

                auth.AllowCancel = true;
                // auth.ShowUIErrors = false;
                // If authorization succeeds or is canceled, .Completed will be fired.
                auth.Completed += (s, e) =>
                {
                    // We presented the UI, so it's up to us to dismiss it.
                    viewController.DismissViewController(true, null);

                    if (e.IsAuthenticated)
                    {
                        Account twitterAccount = e.Account;
                        Dictionary<string, string> dictionaryParameters = new Dictionary<string, string>() { { "status", urlToShare } };
                        var request = new OAuth1Request(SharedConstants.requestMethodPOST, new Uri("https://api.twitter.com/1.1/statuses/update.json"), dictionaryParameters, twitterAccount);
                        //for testing var request = new OAuth1Request("GET",new Uri("https://api.twitter.com/1.1/account/verify_credentials.json "),null, twitterAccount);
                        request.GetResponseAsync().ContinueWith(this.requestResult);
                    }
                    else { OnShare(this, ShareStatus.NotSuccessful); }
                };
                auth.Error += Auth_Error;
                //auth.IsUsingNativeUI = true;
                viewController.PresentViewController((UIViewController)auth.GetUI(), true, null);
            }
        }