この記事は「もくもく会ブログリレー」 5 日目 の記事です。

スクショは検知可能です!!!

そう、スクショはプログラムで検知することが可能です。

これはiOS・Android共通で可能な機能なので、油断しているとアプリの仕様によっては地獄をみます。

どれぐらいハイリスク???

例えばあなたがSNSで好きな子の投稿を見てるとします。その投稿に好きな子の写真がアップされていました。

これ見たあなたは保存したい衝動にかられ、思わずスクショをしてしまいます。

そうするとスクショを検知したタイミングで画面上に表示されているデータを取得し、あなたの識別IDも取得することで投稿した相手(好きな子)にあなたの投稿が誰々によってスクショされた可能性がありますってPush通知を送信することができるんです!!!

これであなたが学生でしかも好きな子と同じクラスだった場合は…あっ…(察し)

コードで証明しよう

プログラムコードを見せてくれないと信じないぞ!!!って層もいらっしゃるでしょう。なのでここにコードを記します。

僕は普段からReactNative(Expo)を使っているので、ExpoSDKを使ったコードになります。

import { useEffect } from 'react';
import { Alert, Platform, StyleSheet, Text, View } from 'react-native';
import { StatusBar } from 'expo-status-bar';
import * as ScreenCapture from 'expo-screen-capture';
import * as MediaLibrary from 'expo-media-library';
export default function App() {
const hasPermission=async () => {
if (Platform.OS==="android") {
const screenCapture=awaitScreenCapture.requestPermissionsAsync();
const mediaLibrary=awaitMediaLibrary.requestPermissionsAsync()
return screenCapture.granted&&mediaLibrary.granted
}
if (Platform.OS==="ios") {
const screenCapture=awaitScreenCapture.requestPermissionsAsync();
return screenCapture.granted
}
}
useEffect(() => {
letsubscription:ScreenCapture.Subscription
const init = async () => {
const isGranted=awaithasPermission()
if (isGranted) {
subscription=ScreenCapture.addScreenshotListener(() => {
console.log("スクショ!!!");
Alert.alert("スクショしたな?", "相手に通知しましたwww")
});
}
}
init()
return () => {
subscription.remove()
}
}, [])
return (
Open up screen capture app!
);
}
const styles = StyleSheet.create({
container: {
flex:1,
backgroundColor:'#fff',
alignItems:'center',
justifyContent:'center',
},
});
これでスクショをすると”スクショしたな? 相手に通知しましたwww”ってアラートが表示されます。

あとはアラートの部分に通知を飛ばすロジックを書き足せば完成です。

対応方法

安心してください。対応方法はちゃんとあります。

Androidの場合はそもそもスクショを検知されることのPermissionを拒否したり、投稿画面を別スマホで撮影すれば検知されようがないです。

※iOSはPermission無しで検知が可能です。

次回

明日の記事は、檜山さんの「 CodeCatalyst(Amazon Q)でTerraform」です。