KAKUSANっていうライブラリ作った
ざっくりまとめ。
- KAKUSAN というライブラリを作った
- ユーザがスクリーンショットをとったのを検知するとシェアを促すというもの
- テキストやURLを任意なものでシェアをできる
- ちょいっと実装話
Notification
でユーザがスクリーンショットをとったということを検知できる- 実は(?)Notification.Name を指定しないと全部受信できる
です。
環境
- Xcode v10.1
- Swfit v4.2
- iOS v11.0+
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
なんかもみれて、こういうの飛んでるのか〜とちょっとおもしろいです。