杏z学習帳

Swift、Unityなどを中心に節操なく手を出してますまる

KAKUSANっていうライブラリ作った(2019/02/25)

[Swift]KAKUSANっていうライブラリ作った

ざっくりまとめ。

です。

環境

KAKUSAN

KAKUSAN というライブラリつくりました!💪(唐突(笑))

なにをするもの?

README 見てもらえるとわかるかとおもいますが。

ユーザがスクリーンショットを取ると、それを検知してシェアを促すというもの。
うながすというか、シェアをユーザにまかせないでこっちでハンドリングしようとするもの。

こういう感じの挙動になります。

なぜ必要なのか?

スクリーンショットをとって SNS なんかにシェアするという行為が結構普及してきているなか、
開発者側からするとそれは大変ありがたいのですけど、
同時に惜しいな!!とも思うことが多々あるのではないでしょうか?

ユーザが自発的にスクリーンショットをとってシェアするときは、たいていアプリ情報はありませんよね?

「このアプリおもしろい!」with スクリーンショット

みたいな。(どのアプリだよ!ってなるパターンですね😇)
良くてなにかのハッシュタグがつくかなぁ...
たまーにアプリ名もついてるかなぁ...
ごくごくまれにストアやら公式サイトへのリンクが...(いや、このケースはほぼ無い気がする(笑))
という感じで、大変ありがたいしうれしいけど、、願わくばっ!と。

そこで、ユーザがスクリーンショットをとったときに、こちらでシェア用のテキストとかURLをつけてシェアさせることができたら。。。となるわけです。

このアイディアは僕が思いついたわけじゃなく、アプリマーケティング研究所さんの記事をみて「なるほど!」と思っただけですけど(笑)

使い方

単に使うだけなら任意なタイミングで KAKUSAN.shared.start() を呼び出してあげるだけで ok です。
が、これだけだと、シェア用のテキストとかつかないので、後は必要に応じて設定をもろもろ。

var config = KAKUSAN.Config(text: "#ツイクラ #anzfactory", url: URL(string: "https://itunes.apple.com/us/app/id1107663641?l=ja&ls=1&mt=8"))
KAKUSAN.shared.configure(confg)

こういう感じで設定すると、シェアするときにテキストとリンクがついてされるということに!✨
ただユーザからすると鬱陶しいかなぁ?っていう懸念もつきまといますが。。(汗)

実装話

この ユーザがスクリーンショットをとったことを検知する という要件。
実は(?)iOS だとさほど…というか全然難しくなく、さくっと実現できます。
Notification がとんでくるのです。

NotificationCenter.default.addObserver(
    self,
    selector: #selector(type(of: self).userDidTakeScreenshotNotified(notification:)),
    name: UIApplication.userDidTakeScreenshotNotification,
    object: nil
)

UIApplication.userDidTakeScreenshotNotification という Notification.Name で。
できるなら、userInfo あたりにスクリーンショットの UIImage がはいってれば最高なのですけど、
それは入っていないので受け取ったら自分でスクショをつくる必要があるのですけどね😇

スクリーンショットを自分で作るにあたって、ユーザが自分でとったときとどうしても同じにできないところがあって...
ステータスバーをいれることができないのですよね。
ある意味プライベートな情報なので、ないほうがシェアするに適しているともいえるけども。

ちょっとした Tips

Notification にまつわる Tips をも1つ。
addObserver(,selector:,name:,object:) で name はよくよくみると optional でそこを nil にしてやると、
すべての Notification を受け取ることができます(笑)
非公開の Notification.Name なんかもみれて、こういうの飛んでるのか〜とちょっとおもしろいです。

参考