読者です 読者をやめる 読者になる 読者になる

Challenge Java EE !

Java EEを中心に趣味や仕事における開発メモを書いています。

XamarinでShare Pluginを使ってSNSなどにシェア

Xamarin

XamarinのアプリからTwitterやFacebookとかを呼び出す機能つけたいなぁと思って調べてたのですが、Xamarin純正(?)のXamarin.SocialなるComponentがありました。

Xamarin.Social / Components / Xamarin

が、自分の環境だとNuGetでのインストールがうまくいかず、、、同じようなことに遭遇してるQAで以下の「Share Plugin」が勧められていました。

GitHub - jguertl/SharePlugin: Simple way to share a message or link on a social network in your Xamarin.Forms projects.

こちらはNuGetからインストールできた。ホッ。

なお、同じライブラリでDeprecatedになっているものもNuGetのリストには出てくるので注意です。(キャプチャ最上段のがDeprecatedと書いてある)

f:id:kikutaro777:20160720222718j:plain

利用は簡単で、とりあえずXAMLにボタンを置いて

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="ShareSample.SharePage">
  <Button x:Name="shareButton" Text="Share" />
</ContentPage>

ボタンイベントでCrossShare.Current.Shareメソッドを呼ぶだけ、という(^^;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Plugin.Share;
using Xamarin.Forms;

namespace ShareSample
{
    public partial class SharePage : ContentPage
    {
        public SharePage()
        {
            InitializeComponent();

            shareButton.Clicked += ShareButtonClick;
        }

        public void ShareButtonClick(object sender, EventArgs ea)
        {
            CrossShare.Current.Share("Xamarinからシェアしてみるテスト");
        }
    }
}

これで実行。ボタンがやる気なさすぎですが、とりあえず(^^;
f:id:kikutaro777:20160720223350j:plain

エミュレータで実行してボタンを押すと

f:id:kikutaro777:20160720223313j:plain

うーん(゜-゜)って感じですが

実機で試したら、おぉ、なんかそれっぽい!

f:id:kikutaro777:20160720223503j:plain

f:id:kikutaro777:20160720223522j:plain

試しにTwitterを選んでみると

f:id:kikutaro777:20160720223536j:plain

おー。ちゃんとテキストが。で、こんな感じに。

ShareLinkメソッドを使うと

CrossShare.Current.ShareLink(
    "http://46collection.sakamichi46.com/",
    "坂道グループのTwitterランクWeb");

こんなコードでメールとか選ぶと

f:id:kikutaro777:20160720223700j:plain

Title属性(引数の2つ目)はメールの表題などにはいるようです。シンプルで良さそう。

SendGridからTシャツ贈ってもらった話

SendGrid Apache HttpComponents Client

わーい、アメリカから贈られてきた(*´▽`*)

f:id:kikutaro777:20160719193455j:plain

SendGrid Web API v3

クラウドメール配信サービスのSendGridから先月、Web API v3がリリースされました。
以下のドキュメントページにもあるように、RESTfulな形で操作できるので、curlなどからでもメール送信できます。データもJSONベース。

API v3 Overview - SendGrid Documentation | SendGrid

これに伴って、言語ごとに開発されていたライブラリもバージョンアップしています。
が、残念ながらbreaking changeとのこと。

また、以下ページにもあるように、現在、日本語というかマルチバイト文字が化けてしまったりするバグがあり、当面v2対応のライブラリが推奨のようです。
support.sendgrid.kke.co.jp

v3がリリースされた後、ライブラリを利用せずにWeb APIをFiddlerとかで叩いていたのですが、自分が送ってた範囲では日本語は文字化けしていませんでした。

ので、ライブラリ側に問題があるのかな?と興味本位にJavaコードをみていきました。

sendgrid-java/java-http-client

SendGridのJavaライブラリは主に以下2つ

ベースにはApache HttpComponents(HttpCore,HttpClientの4系)が使われています。

Apache HttpComponents - Apache HttpComponents

余談ですが、JavaのHttpClient調べてるとめっちゃかずひらさんのページでてくるw

JavaでのHttpClientサンプル - CLOVER
JavaでのHttpClientサンプル その2 - CLOVER

で、SendGridのコードを色々追ってると、文字コードはUTF-8にしてるのですが、POSTするデータには適用してるけど、レスポンスでは適用していない形になってたりと中途半端な感じでした(^^;
これレスポンスもちゃんとUTF-8にすれば文字化けなくなるんじゃ、、と試したら、文字化けがなくなりました。で、せっかくなのでissueを切って、プルリクしてみました。

SendGridへのコントリビュート

SendGridにプルリクするにはCLA/CCLA*1なるものにサインする必要があります。GitHubみてると、プルリク先に送って「マージするからCLA送ってー」みたいなやりとりも多々あるっぽいですが、先に書いとくのが無難かと。

難しいものではなく、以下Contributingの説明ページにあるリンクからPDFを落として、英語で名前や住所・メールなど書くだけです。

github.com

こういうの手書きがいいの…?とか思って自分は手書きしたのをPDF化して送りましたが、今考えると普通にPDFを編集しても問題ない気が(^^;

まだプルリクはマージされてないのですが、「ありがとう!Tシャツ送るからサイズ教えて」みたいになって、贈ってくれました。大した修正したわけではないのだけど(^^;;;

なお、マルチバイトの問題はライブラリ側だけではなく、サーバサイド側でも若干問題があるようですので、やはり暫くはv2を使うのが無難そうです。

Javaのライブラリ、コードみてると、結構気になるところがあります(^^;;というかぶっちゃけ雑な気がw
コツコツ触るか、いっそ自分でライブラリ作りたいなーと。

*1:CLA = Contributor License Agreement、CCLA = Company Contributor Licensing Agreement

PrimeFaces FileUpload component doen't work on Embedded Glassfish.

GlassFish オフライン

Now, I'm developing offline web system after finishing developing online web.

I had experience once. I wrote following posts about how I developed offline web before.But these are Japanese.

kikutaro777.hatenablog.com
kikutaro777.hatenablog.com

This time, I found some strange behavior.

In this system, we use PrimeFaces FileUpload component. The version of PrimeFaces is 5.2. Of course it works fine on GlassFish.

But, unfortunately, it doesn't work on Embedded GlsasFish :q

I don't understand what happened inside and what is different between GlassFish and Embedded GlassFish.

I checked the document of PrimeFaces. Really appreciate the good document.

http://www.primefaces.org/documentation

The document explained there are three options for FileUpload component.
auto / native / commons.

The default mode is auto.

PrimeFaces tries to detect the best method by checking the
runtime environment, if JSF runtime is at least 2.2 native uploader is selected, otherwise commons.

I tried to use the option "native", but nothing changed.
After that, I tried "commons".

Finally, it worked on Embedded Glassfish !!!

The explanation of the document about "Commons" is following.

This option chooses commons fileupload regardless of the environment, advantage of
this option is that it works even on a Servlet 2.5 environment.

I still don't understand what happened inside... anyway, it's good for us now.

にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ Javaへ
にほんブログ村
QLOOKアクセス解析