[Android] アプリが実行できる最下位の API レベル (OSバージョン) は android:minSdkVersion で設定する
- 2013 6/19
タイトルで完結していますが、Android アプリが実行できる最下位の API レベル (OSバージョン) は android:minSdkVersion で設定できます。
詳しくはこちら。
APIレベル(OSバージョン)については、ウィキペディアでも確認できます。
タイトルで完結していますが、Android アプリが実行できる最下位の API レベル (OSバージョン) は android:minSdkVersion で設定できます。
詳しくはこちら。
APIレベル(OSバージョン)については、ウィキペディアでも確認できます。
iPhoneアプリのApp StoreダウンロードページのURLを申請前に作成する方法をメモ。
・iPhoneアプリをDLするURLを申請前に作成する方法 – Sawalog
・hyperlink – What is "mt=8" in iTunes links for the appstore? – Stack Overflow
Google Play Developer Console で Android アプリを申請する際に「マーケティングの除外」という項目があって、これについて調べたことをメモ。
「マーケティングの除外」の項目は、デフォルトでチェックがオフになっていて、チェックボックスの横には下記のような説明が書かれている。
Google Play と Google 所有のオンライン/モバイル サービス以外ではアプリケーションを宣伝しません。この設定への変更が有効になるまでに 60 日程度かかることについて了承します。
アプリケーションの宣伝のための露出が多い方が良いなら、未チェックのままでよさそうです。
下記の記事で詳しく考察されてます。
・Androidの“マーケティングの除外”について – adsaria mood
マーケティング対象の限定
アプリのマーケティングを Google Play だけで行う場合は、次の方法で他でのマーケティングを除外できます:
Google Play デベロッパー コンソールにログインします。
スクロールして、マーケティングから除外するアプリを探します。
[価格と販売/配布地域] を選択します。
[同意事項] の下にある [マーケティングの除外] を選択します。
Android アプリにて、正しく時刻設定してないと Twitter 認証時に下記のような例外が発生してしまいます。
Received authentication challenge is null Relevant discussions can be found on the Internet at: http://www.google.co.jp/search?q=10f5ada3 or http://www.google.co.jp/search?q=e574403a TwitterException{exceptionCode=[10f5ada3-e574403a b8c63e52-c913c2cc], statusCode=-1, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=3.0.3} |
動作試験で、時刻設定を未来の時間に設定したままで、今回のようなエラーが発生しました…。
とりあえず、バグではなかったので良かったです。
Android アプリ開発で、Facebook 認証できないというエラーが発生しました。
com.facebook.FacebookOperationCanceledException: remote_app_id does not match stored id |
Facebook アプリの設定画面に登録している Key Hashes が間違っている場合、このようなエラーが発生するようです。
下記のコードを onCreate に記載して、key hash をログに出力して確認します。
try { PackageInfo info = getPackageManager().getPackageInfo("com.example.packagename", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.d("YOURHASH KEY:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } catch (NameNotFoundException e) { } catch (NoSuchAlgorithmException e) { } |
key hash をコマンドラインで確認する方法もありますが、Windows用の OpenSSL を使わないといけないらしく、Mac用の OpenSSL だと正しい key hash が取得できないみたいです。
例えば、コマンドラインで keytool を使って debug.keystore の key hash を確認すると、 bvfSSDnrryuK8cbfekyHTs59l/A= です。
keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64 キーストアのパスワードを入力してください: android bvfSSDnrryuK8cbfekyHTs59l/A= |
しかし、冒頭の方法で、アプリ実行時のログから key hash を出力させると dkgthMwGADFQ7/9fkMn4MUzpSWo= であり、こちらが正しい値です。
ややこしい話ですが、解決方法が分かって良かったです。
Android アプリの署名ビルドに使う keystore ファイルの内容を確認するコマンドをご紹介します。
Android アプリ開発で、2.3 とかも動作対象端末にしたい場合、getActionBar() ではなく ActionBarSherlock の getSupportActionBar() を使うようにする。
getActionBar() を使うと NoSuchMethodError というエラーが発生してしまう。
スレッド [<1> main] (中断中 (例外 NoSuchMethodError)) <VM はモニター情報を提供しません> TutorialActivity.onCreate(Bundle) 行: 40 Instrumentation.callActivityOnCreate(Activity, Bundle) 行: 1047 ActivityThread.performLaunchActivity(ActivityThread$ActivityClientRecord, Intent) 行: 1615 ActivityThread.handleLaunchActivity(ActivityThread$ActivityClientRecord, Intent) 行: 1667 ActivityThread.access$1500(ActivityThread, ActivityThread$ActivityClientRecord, Intent) 行: 117 ActivityThread$H.handleMessage(Message) 行: 935 ActivityThread$H(Handler).dispatchMessage(Message) 行: 99 Looper.loop() 行: 123 ActivityThread.main(String[]) 行: 3691 Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) 行: 使用不可 [ネイティブ・メソッド] Method.invoke(Object, Object...) 行: 507 ZygoteInit$MethodAndArgsCaller.run() 行: 864 ZygoteInit.main(String[]) 行: 622 NativeStart.main(String[]) 行: 使用不可 [ネイティブ・メソッド] |
うっかりミス
Android アプリ開発で、setOnTitleClickListener でセットした OnClickListener を解除・削除する方法をご紹介します。
例えば OnClickListener をセットするメソッドを下記のようにすると、
public void setOnTitleClickListener(OnClickListener listener) { mTitleView.setOnClickListener(listener); } |
OnClickListener を削除するメソッドは下記のようになります。
public void removeOnTitleClickListener() { mTitleView.setOnClickListener(null); } |
無理矢理ですが setOnClickListener(null) するだけです。
Android アプリ開発で、明示的 Intent で YouTube 公式アプリで動画を再生するコードがバグってて、正しく動作するコードを調べたのでメモ。
JSONP を使う上でのセキュリティについて気になったので、調べたサイトをメモ。
・Web 2.0的アプリのセキュリティ:機密情報にJSONPでアクセスするな : アークウェブのブログ
・第3回 JSONPでのクロスドメインアクセス:ここが危ない!Web2.0のセキュリティ|gihyo.jp … 技術評論社
・なぜJSONPだとクロスドメイン制約を超えられるのか? – 射撃しつつ前転
・JSONPはセキュアでないのか? – snippets from shinichitomita’s journal
Node.js (Express) で JSONP を対応させる方法は下記が参考になります。