ã¯ããã«
ããã«ã¡ã¯ãã¢ãã¤ã«ã®ããã¯ãªã¼ãã®å¤§æ¾¤ã§ãã æ®æ®µã¯ããããã®Android/iOSã¢ããªãéçºãã¦ãã¾ãã
ã¢ãã¤ã«ã¢ããªãããããããã«ã¦ã¼ã¶ã¼ã®å£°ãèããæ¹åã«ç¹ããå¿ è¦ãããã¾ãã
ãã®ä¸ã§ããApp StoreãGoogle Playã«æç¨¿ãããã«ã¹ã¿ãã¼ã¬ãã¥ã¼ã¯è²´éãªãã¼ã¿ã¨ãªãã¾ãã
æ¬è¨äºã§ã¯ãã¢ãã¤ã«ã¢ããªã®ã«ã¹ã¿ãã¼ã¬ãã¥ã¼ãéç¥ããã·ã¹ãã ããªãä½ã£ãããã©ã®ããã«å®è£ ããã®ãã«ã¤ãã¦è§£èª¬ãã¾ãã
ãªããã·ã¹ãã ãå¿ è¦ãªã®ãï¼
ã«ã¹ã¿ãã¼ã¬ãã¥ã¼ãæåã§ç¢ºèªããæ¹æ³ã¨ãã¦ã¯ä»¥ä¸ã®ãã®ãããã¾ãã
- App StoreãGoogle Playã§ç¢ºèªããã
- App StoreãGoogle Playã®ç®¡çç»é¢ã§ç¢ºèªããã
æåã§ã®ç¢ºèªã«ã¯è²ã ã¨åé¡ãããã¾ãã
- ãªã¢ã«ã¿ã¤ã æ§
- ä¸å ·åãçºçããæã«è¿ éã«å¯¾å¿ãããã
- ãªãªã¼ã¹ããæ©è½ã®åå¿ãè¦ãã®ã«å³æã§ç¢ºèªãããã
- 確èªä½æ¥ã®æé
- ã¹ãã¢ã¢ããªã管çç»é¢ã§ãã§ãã¯ããã®ã¯å®éã®ç»é¢ã¾ã§è¡ãã«ã¯ã¹ããããå¤ããæ¯æ¥å®æ½ããã®ã¯å¤§å¤ã
- å±äººå
- ã¹ãã¢ã¢ããªã管çç»é¢ã®ãã§ãã¯ãä»®ã«å®æ½ããå ´åã¯ç¹å®ã®äººã«åã£ã¦ãã¾ããç¹å®ã®äººããããªããªãã¨å»ãã¦ãã¾ãã
ã·ã¹ãã å®è£ ã¤ã¡ã¼ã¸
æåã§ã¯ä¸è¨ã®åé¡ãããã®ã§
èªååããã¦ã«ã¹ã¿ãã¼ã¬ãã¥ã¼ã®æ å ±åéã宿çã«Slackéç¥ããä»çµã¿ãä½ãã¾ãã
社å¡èª°ã§ãè¦ããç¶æ ã«ãããã®ã§Slackã«éç¥ãã¾ãã
å®è£ æ¹æ³
Google Playã®å ´å

ã·ã¹ãã æ¦è¦
Google Apps Scriptã§Google Play Developer APIã使ç¨ããGoogle Playã®ã«ã¹ã¿ãã¼ã¬ãã¥ã¼ãåå¾ããå徿 å ±ãSlackã«éç¥ããã¹ãã¬ããã·ã¼ãã«æ¸ãè¾¼ãã
- ä¸è¦§ã§è¦ããããã«ã¹ãã¬ããã·ã¼ãã«æ¸ãè¾¼ãã§ãã¾ãã
Google Play Developer API
APIã使ãããã«èªè¨¼å¦çãå¿ è¦ã§ãã
å¿ è¦ãªè¨å®ã¯ä¸è¨ã®è¨äºã«è©³ããè¼ã£ã¦ããã®ã§å²æãã¾ãã
https://qiita.com/Nekoq0o0p/items/71d962ed9a93b95df5bf
ç°å¢å¤æ°ã¯GCSã§è¨å®ããå¤ã使ãã¾ã
PRIVATE_KEY_GCS
CLIENT_EMAIL_GCS
SCOPEã¯ä»åã¯androidpublisherã®APIã使ãããã®ã§
https://www.googleapis.com/auth/androidpublisher ãè¨å®ãã¾ã
https://developers.google.com/identity/protocols/oauth2/scopes?hl=ja
èªè¨¼ã«ã¯ä¸è¨ã®ã©ã¤ãã©ãªã使ãã¾ãã
https://github.com/googleworkspace/apps-script-oauth2
return OAuth2.createService('GCS') .setTokenUrl('https://oauth2.googleapis.com/token') .setPrivateKey(PRIVATE_KEY_GCS) .setIssuer(CLIENT_EMAIL_GCS) .setPropertyStore(PropertiesService.getScriptProperties()) .setScope(SCOPE);
èªè¨¼å¾ã«ä¸è¨ã®APIããªã¯ã¨ã¹ãããã¨ã«ã¹ã¿ãã¼ã¬ãã¥ã¼ãåå¾ã§ãã¾ãã
GET /androidpublisher/v3/applications/{packageName}/reviews
https://developers.google.com/android-publisher/api-ref/rest#rest-resource:-v3.reviews
åå¾å¾ã¯Slackãã¹ãã¬ããã·ã¼ãç¨ã«ãã¼ã¿ãå å·¥ãã¾ã
App Storeã®å ´å

ã·ã¹ãã æ¦è¦
Github Actionsã§App Store Connect APIãå®è¡ããAppStoreããã«ã¹ã¿ãã¼ã¬ãã¥ã¼ãåå¾ããæ å ±ãSlackã«éç¥ããã
App Store Connect APIã®å©ç¨æ¹æ³
APIã使ç¨ããã«ã¯ãèªè¨¼ãå¿ è¦ã§ãã
ãã®ãããã¾ãApp Store Connectã§APIãã¼ã使ãã¾ãã
使ãããã¼ããAPIãªã¯ã¨ã¹ããè¡ãéã«ã¯ã以ä¸ã®æ å ±ãå¿ è¦ã«ãªãã¾ãã
- Issuer IDï¼App Store Connectã§ç¢ºèªå¯è½ï¼
- Key IDï¼ä½æããAPIãã¼ã®èå¥åï¼
- p8ãã¡ã¤ã«ã®ç§å¯éµï¼ãã¦ã³ãã¼ããã.p8ãã¡ã¤ã«ï¼
å¼ç¤¾ã®ç°å¢ã§ã¯ãã§ã«App Store Connect APIã使ç¨ãã¦ããã®ã§ãAPI ãªã¯ã¨ã¹ãã«å¿ è¦ãªãã®ã¯Github Actionsã«è¨å®ãã¦ããã¾ããã
Github Actionsã®ã¹ã±ã¸ã¥ã¼ã«ã«çµã¿è¾¼ãã§å®è¡ããããã«ãã¾ãã
å ¨ä½ã®å¦çã®æµãã¨ãã¦ã¯API ãªã¯ã¨ã¹ãã«å¿ è¦ãªå¤æ°ãèªã¿è¾¼ã¿JWTãçæãã
ã«ã¹ã¿ãã¼ã¬ãã¥ã¼åå¾ã®APIããªã¯ã¨ã¹ããã¦ãã¾ãã
ãªã¯ã¨ã¹ãããçµæãå å·¥ãSlackã«éç¥ãã¦ãã¾ãã
https://developer.apple.com/documentation/appstoreconnectapi/customer-reviews
require 'net/http' require 'jwt' require 'json' require 'uri' require 'time' # å¿ è¦ãªæ å ± ISSUER_ID = "your_issuer_id" KEY_ID = "your_key_id" PRIVATE_KEY_PATH = "path/to/AuthKey_XXXXXXXXXX.p8" APP_ID = "your_app_id" # ãã¤ãã¼ã payload = { iss: ISSUER_ID, iat: Time.now.to_i, # çºè¡æé exp: Time.now.to_i + (60 * 15), # 15åå¾ã«æéåã aud: "appstoreconnect-v1" } # ãããã¼ headers = { kid: KEY_ID, alg: 'ES256' } # ç§å¯éµãèªã¿è¾¼ã private_key = OpenSSL::PKey::EC.new(File.read(PRIVATE_KEY_PATH)) # JWTãçæ token = JWT.encode(payload, private_key, 'ES256', headers) uri = URI("https://api.appstoreconnect.apple.com/v1/apps/#{APP_ID}/customerReviews") params = { 'fields[customerReviews]' => 'xxx', # å¿ è¦ãªæ å ±ã«çµã 'sort' => '-createdDate', # ææ°é 'limit' => 50 # åå¾ä»¶æ° } uri.query = URI.encode_www_form(params) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true request = Net::HTTP::Get.new(uri) request['Authorization'] = "Bearer #{token}" response = http.request(request) puts response
ææ
ä¸å ·å対å¿ã®ãã£ããã«ãªã
- ã¬ãã¥ã¼ã«æ¸ãè¾¼ã¿ããããã¨ã§ä¸å ·å調æ»ã®ãã£ããã«ãªãã¾ããã
æ©è½æ¹åã®ã¢ã¤ãã£ã¢ã«æ´»ç¨
- Slackã§è¦ããããã«ãªã£ããã¨ã§ã¬ãã¥ã¼ã³ã¡ã³ãããæ©è½æ¹åã®ã¢ã¤ãã£ã¢ã«æ´»ç¨ããäºä¾ãå¢ãã¾ããã
ã¢ããã¼ã·ã§ã³ã«ãªã
- è©ä¾¡ã®è¯ãã¬ãã¥ã¼ãè¦ãã¨éçºã®ã¢ããã¼ã·ã§ã³ã«ãªãã¾ãã
ä»å¾ã®å±æ
éè¨ãããã¼ã¿ãæ´»ç¨ããããã«AIãªã©ã§åæã§ããããã«ä»çµã¿ãåãå ¥ãããã¨æãã¾ããã
askenã§ã¯ä¸ç·ã«åãã¦ããã仲éãåéãã¦ãã¾ãã