Android 6.0/M 부터는 iOS처럼 권한을 물어줘야 하는군요...

안드로이드 6.0에서 showCamera가 에러도 리턴도 없이 그냥 먹통이라 찾아보니…

Android 6.0/M 부터는 iOS처럼 권한을 물어줘야 하는군요…
http://www.appcelerator.com/blog/2015/11/titanium-5-1-0-sample-app/

카메라 뿐 아니라, 위치정보/주소록/캘린더 모두 권한을 다시 물어야하네요.
(ti sdk 5.1이상 기준입니다.)

코드는 이쪽입니다.

그래요. 뭐 보안에 신경을 더 쓰는건 좋은 방향이겠죠…

그리고, remote image가 안나오는 문제를 해결하려면, storage permission을 물어줘야하는데요.
Ti SDK에 이부분이 없어서 임시로 사용할 모듈을 만들어 봤습니다.

1개의 좋아요

아 이게 필수였나요? -_-;;; 아직은 선택사항인줄 알았는데…

ti sdk 5.1미만으로 빌드한건 문제 없더라구요.
5.1부터는 필요한것 같습니다.

아, 그리고 저장에 대한 권한도 꼭 필요한데요.

이게 없으면 remote의 이미지를 불러오지 못합니다…
imageview가 내부적으로 tidownloader를 이용해서 url을 처리하는데, 이게 권한 문제로 에러가 나요.

관련내용은 여기 있어요.
https://jira.appcelerator.org/browse/TIMOB-19899

저장 권한은 카메라 권한을 물으면 같이 켜집니다.

문제는 따로 저장권한만 물을 방법이 없는데요…


sdk 코드를 보니, requestCameraPermissions()에 이미 READ_EXTERNAL_STORAGE에 대해서 다 구현되어 있으니, requestStoragePermissions() method 하나만 추가하면 되겠네요.

  • If the device is running Android 5.1 or lower, or your app’s target SDK is 22 or lower: If you list a dangerous permission in your manifest, the user has to grant the permission when they install the app; if they do not grant the permission, the system does not install the app at all.

  • If the device is running Android 6.0 or higher, and your app’s target SDK is 23 or higher: The app has to list the permissions in the manifest, and it must request each dangerous permission it needs while the app is running. The user can grant or deny each permission, and the app can continue to run with limited capabilities even if the user denies a permission request.

http://developer.android.com/training/permissions/requesting.html
이렇다네요~

에잉 그냥 Storage 권한만 요청할 수 있는 모듈을 만들었습니다.

1개의 좋아요

으아!! 저 오늘 몇시간을 날린 문제도 이것 때문이였군요. 폰에서 tishadow의 변경사항이 안보이길래 무엇때문인가 했는데 결국 이것 때문이였어요. :cry:

왜 이 생각이 뒤늦게 났을까요? 후회해봐야 지나간 과거 :smile:

어쨋든 동우님 감사!

Ti SDK 5.4.0부터 requestStoragePermissions가 들어가는데,
Ti SDK 5.2.0(5.2.1이던가…) 부터는 imageview 캐쉬 부분을 수정해서 권한 없이도 이미지가 나온다고 합니다.

tishadow를 위해선 저장소에 대한 권한이 필요한데… 이거만 물어보려면 동우님꺼 써야하나요? 아니면 sdk에 포함되었나요?

Ti SDK 5.4.0은 아직 멀었으니 저 모듈 쓰시면 됩니당.

앱에서는 필요 없고, tishadow 만을 위한거면 그냥 설정가서 수동으로 켜셔도 되어요.

1개의 좋아요

tishadow에 동우님 모듈을 넣어서 PR을 만들고 싶지만… 여유가… ㅠ

안녕하세요?

GitHub에 올려주신 Ti-Android-RequestStoragePermission 모듈을 감사하게 잘 사용하고 있습니다.

오늘 맥 OS를 시에라로 업그레이드하고, Xcode도 8.0으로 업그레이드 했는데,
안드로이드가 아닌 iPhone 5 (= iOS 10) 상에서 이상한 에러가 발생해서 문의드립니다.
(동일한 빌드가 iPhone 6 (= iOS 9)에서는 잘 됩니다.)

에러 메시지는 아래와 같습니다.

Couldn’t find module: com.boxoutthinkers.reqstorageperm for architecture: armv7

모듈을 다시 빌드해야 되나 싶어서 모듈 소스 내의 build.properties를 Titanium SDK 5.5.0.GA와 제 안드로이드 SDK, NDK 환경으로 변경하고 빌드해서 사용해도 마찬가지네요.

맥 OS 엘 캐피탄과 Xcode 7.x를 사용할 때는 문제없이 잘 실행되었습니다.

왜 iPhone 5에서 저 에러가 날까요?
iOS 버전이 신버전이라서 iPhone 5에서는 안되는 건지, CPU가 달라서 안되는 건지 감이 잘 안잡힙니다.

짐작되는 부분이 있으시면 좀 알려주세요.

그럼 좋은 밤 되세요~


추가 1:
iOS 10인 iPad Air에서도 에러가 발생합니다.

Couldn’t find module: com.boxoutthinkers.reqstorageperm for architecture: arm64

안드로이드 전용 모듈인데 왜 iOS10 기기들에서 에러가 발생하는 걸까요?

맥 OS 및 Xcode를 업그레이드하기 전에는 iOS10에서도 잘 동작했습니다.
Xcode 8 버그일까요?


추가 2:
tiapp.xml에는 아래와 같이 추가되어 있습니다.

<modules>
    <module platform="android">com.boxoutthinkers.reqstorageperm</module>
</modules>

전 시에라 올렸다가 롤백 했습니다. Xcode8도 롤백했습니다.

역시 X.0은 거르고 X.1 나오면 가야되나봅니다.

외국 애플 개발자들도 big buggy라도 하더라구요.

저도 타임머신을 타야겠네요.

1개의 좋아요