Android Deeplinkを特定のパスにのみ対応させる

Wanoグループ Advent Calendar 2016の11日目の記事になります。11日目の44時くらいです。決して12日目ではない。

AndroidのDeepLink設定のメモ。

https://xxx.com/release/***

https://xxx.com/item/***

のような2つのパスのみにアプリが反応するように以下のように組んでいた。

 <activity android:name=".Container.Routing.RoutingActivity">
   <intent-filter>
   <action android:name="android.intent.action.VIEW" />

   <category android:name="android.intent.category.DEFAULT" />
   <category android:name="android.intent.category.BROWSABLE" />

   <data android:scheme="http" />
   <data android:scheme="https" />
   <data android:host="xxxx.com" />
   <data android:pathPrefix="/artist/" />
   <data android:pathPrefix="/item/" />
   </intent-filter>
 </activity>

  
しかしこれでは該当のパス以外のURLにも反応してしまっていた。
  
そこでリンクを以下のように修正。

...
 <intent-filter>
   <action android:name="android.intent.action.VIEW" />
   <category android:name="android.intent.category.DEFAULT" />
   <category android:name="android.intent.category.BROWSABLE" />
   <data
     android:scheme="https"
     android:host="xxxx.com"
     android:pathPrefix="/artist/"
   />
 </intent-filter>

 <intent-filter>
   <action android:name="android.intent.action.VIEW" />
   <category android:name="android.intent.category.DEFAULT" />
   <category android:name="android.intent.category.BROWSABLE" />
   <data
     android:scheme="https"
     android:host="xxxx.com"
     android:pathPrefix="/item/"
   />
 </intent-filter>
 </activity>

当面はこれで該当のパスにのみDeepLinkが適用されるようになった。

Read More

AndroidのWebViewの思い出

Wano の 伏見です。
この記事はWanoグループ Advent Calendar 2016の9日目の記事になります。

この記事に関しては死亡事故のたびに随時追記するかも。

webViewのCookieの同期で死亡

Android WebViewのCookieの扱いで激ハマりした話
この記事と違って4.4系では死ななかった。4.2ではものも言わずアプリは死にました。

そもそも4.4までのCookieマネージャがdeprecatedなので分岐大変

最新のOSのWebViewでアブないサイトに対応する

http/https混在環境で mixed contentsの設定をガバガバにします。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    webView.getSettings().setMixedContentMode( WebSettings.MIXED_CONTENT_ALWAYS_ALLOW );
}

アブないOSのWebView でセキュアなサーバーに接続する

デフォルトで SSlv3 で通信するようになっている OS の場合、
OkHttp や HttpUrlConnection などの通信系ライブラリは、通信前にGooglePlayServicesから動的にパッチを当てれば、TLS1 ~ 1.2系が使えるようになる場合があります。

同期的にパッチを当てる場合

try {
    ProviderInstaller.installIfNeeded(getActivity());
} catch (GooglePlayServicesRepairableException e) {
    e.printStackTrace();
} catch (GooglePlayServicesNotAvailableException e) {
    e.printStackTrace();
}

それでも4.3以前の デフォルトWebView では SSLv3 を 使ってしまうことがある。対応できません

通信の上書きにも限界があるでしょう。

学び

  • アプリサイズがかなり大きくなることと引き換えに、代替WebViewのCrossWalkを使おう
  • でも基本的にしょうもないものはどんどん捨てよう
  • 要件定義で殺そう
  • iOS8や4.3系以下はセキュリティ的にもはや危ないし、シェア的にも対応コストの方が高いという認識を周知していこう

それはそうと

ECサイトとかのトラッキング & 広告系 のタグ , ページのロードをブロックしながら document.write()しててChrome先生のコンソールで怒られまくってるんですが、そろそろ消されますよ?

Read More

シェルスクリプトの結果をメールに送ってみる

この記事はWanoグループ Advent Calendar 2016の8日目の記事です。

例えば、リリース用のコマンドなど、自作のシェルスクリプトを作ったとします。

その際に、実行中に出力された内容を他のみんなに共有したいなーと思ったとします。Slackに送るのにも使えますよ(うちは、特定のメールアドレスに送ったら、特定のチャンネルに届くようにしています)。まず、出力された内容をログファイルに書き込みましょう。


logfile=/path/to/log/$(date +%Y-%m-%d_%T).log

exec 1&gt; &gt;(tee $LOG_FILE)
exec 2&gt;&amp;1

こうるすることで、出力内容は、すべて /path/to/log/日付_時間.log 書き込まれます。

コマンドの引数や誰が実行したかを変数に入れておきます。


your_name=$(who am i | awk '{print $1}');
mailto="$your_name@example.com"
command_args="$@";

コマンドの実行中にプロンプトが出る場合は、それに対する応答も出力するようにしておきましょう。


echo -n "run? (y/n): "
read -p "" confirm;
echo "(select $confirm)" # ログに残すために echo しておく

次に _exit を定義して、exit を _exit に置換します。


function _exit () {
    n=$1;
    mark=""
    cat $log_file | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" \
      | mail -s "[COMMAND_NAME] $command_args - $your_name" $mailto;
 }

途中でエラーが起きたり、Ctrl-Cで中断してもメールを送るようにしましょう。


set -o errexit
trap "echo;echo;echo 'COMMAND IS ABORTED!!';_exit 1" 1 2 3 15

既存のスクリプトに、これくらい追加することで、自作のスクリプトの実行結果をメールで送るようにできます。

最後に、サンプルのスクリプトを置いておきます。

#!/bin/bash

mailto='to@example.com';
log_file="/tmp/log.$(date +%Y-%m-%d).log";

exec 1&gt; &gt;(tee $log_file);
exec 2&gt;&amp;1;
 
set -o errexit
trap "echo; echo; echo 'COMMAND IS ABORTED!!'; _exit 1" 1 2 3 15;
 

your_name=$(who am i | awk '{print $1}');
command_args="$@";
is_success=1;
 
function main () {
    echo -e '\e[1;32mHello!\e[0m\n';
    echo "input 'OK' with enter.";
    read -p "" input;
    echo "(input: $input)";

    if [ "$input" = "OK" ]; then
        is_success=0;
        echo;
        echo "SUCCESS!";
    fi
    _exit $is_success;
}
 
function _exit () {
    n=$1;
    mark=""
    result="NG";
    if [ "$n" = "0" ]; then
        result="OK";
    fi
    trap "exit" 1 2 3 15;
    sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" $log_file \
      | mail -s "[COMMAND_NAME] $command_args - $result - $your_name $result" \
      $mailto;
}
main;

実行すると、以下のようなメールが届きます。

Hello!

input ‘OK’ with enter.
(input: OK)

SUCCESS!

Read More

AppleScriptでPerlのcommandを実行する

この記事はWanoグループ Advent Calendar 2016の6日目の記事です

AppleScriptとは?

AppleScript は、OS X に組み込まれている、多目的なスクリプト言語です。AppleScript を使ってショートカットを作成したり、繰り返しのタスクを自動化したりできます。さらに、そのアイコン上にファイルまたはフォルダをドラッグ&ドロップしたときに実行出来ます。今回紹介する例は、デスクトップからドラッグ操作でファイルを移動して、AppleScriptでPerlのcommandを実行するものです。

まず、スクリプトエディタを選択して起動します。

scripteditor

スクリプトエディタ

 

ドラッグ操作なので、そのスクリプトの実行を開始するには、「on open」ハンドラを必要とします。「on open」ハンドラには、ドロップレットにドラッグしたファイルのオブジェクトのリストが入ります、以下の例を示します。

on open (theItemsDropped)
  (first command)
  (second command)
   …
end open

 

実際のコード:


on open these
  # 複数ファイル対応
  repeat with this in these
    set filename to POSIX path of this
    # tellコマンドを使ってFinderにiTermを開くように命令します
    tell <i>application</i> "iTerm"
      # activateは指定されたウインドウを開き、手前に移動します
      activate
      #iterm中でdefault profileの設定をして、新しいiTermのwindowを開きます
      set new_term to (create window with default profile)
      tell new_term
        tell the current session
        #FileToAction.plにiTermでファイル実行する
        write text "perl /Users/johnny/src/test/FileToAction.pl" & filename
        end tell
      end tell
    end tell
  end repeat
end open

ファイルを扱うには、スクリプトのままではなく、.appファイルで保存します。

そうすると、エンジニア以外の人でも、簡単にファイルをドラッグして、Perlのcommandを実行する操作できます。

Read More

Sublime text布教

この記事は1日目から頓挫しかけて慌てて書いたWanoグループ Advent Calendar 2016の1日目です。

Wanoは少々珍しく、デザイナー兼コーダーの皆さんはWindowsが多いです。
エディタは各々好みのものを利用していますが、参考までに私の使っているエディタを紹介していこうと思います。

エディタ

Sublime text 3

使用パッケージ

  • IMESupport…日本語をインラインで入力できるように
  • Japanize…メニューの日本語化
  • SimpleClone…タブの複製
  • SublimeServer…ローカルサーバー
  • SFTP
  • COMPASS…SASSのコンパイル
  • SCSS…scssファイルを扱えるように

と、最小限の構成です。COMPASSを使うにはRubyが必要等もうひと手間かかります。
特に便利だと思っているものは太字にしてあるので、今後詳しく紹介します。

Sublime textのいい所は拡張性が高い等が言われていますが、何よりも環境の引っ越しが楽というのが使っている理由です。
C:\Users\ユーザー名\AppData\Roaming\Sublime Text 3\
内のファイルと
Preferences.sublime-settings
の内容を丸ごとコピペするという2ステップで環境の引っ越しが完了します

次回からは各パッケージのインストール方法や、細かい設定、ショートカット等を紹介できればと思います。
エディタで迷っている方がいれば参考になれば幸いです。

Read More