主要な中国のAndroidアプリストアと、そのアカウント取得方法

中国はGoogle Playが無い

中国は国内からGoogle Playにアクセス出来ないという事を今日知りました。(2015/2/16現在)
というわけで、中国のGoogle Play以外の主要なアプリストアの一覧と、そのストアでアカウントをどのように取得するのか。
ID番号が必要であったり、会社の証明書を要求したり、どこも難易度が高いです。
1,2は英語ページがある分、まだましですね。海外向けも意識してくれている。

①MyApp (Tencent)

http://android.myapp.com/
開発者向けページ
http://open.qq.com/
開発者向けページ(英語)
http://open.qq.com/eng/reg
登録にはDeclaration of AuthorizationとCompany Licenseの
写真のアップロードが必要
APKファイルを添えて、登録と同時にアップロード可能

②Qihoo 360 Mobile Assistant

http://zhushou.360.cn/soft/
開発者向けページ
http://dev.360.cn/
開発者向けページ(英語)
http://developer.360.cn/distribution
登録にはDeclaration of AuthorizationとCompany Licenseの
写真のアップロードが必要
APKファイルを添えて、登録と同時にアップロード可能

③Wandoujia

http://www.wandoujia.com/apps
申請ページ(QQまたはWeiboのアカウントでログイン可能?)
http://open.wandoujia.com/home

④MIUI (Xiaomi)

http://app.mi.com/
申請ページ
http://dev.xiaomi.com/
日本の電話番号で登録可能
開発者アカウント登録ページでID番号が必要(個人の場合)
企業の場合は、ビジネスライセンス登録番号、ビジネスライセンスの写真、
税務登録番号、税務登録証明書のコピーの写真が必要

⑤Baidu App Store

http://as.baidu.com/
※開発者アカウント登録に中国の電話番号、IDが必要
アプリ申請ページ
http://app.baidu.com/
開発者アカウント登録ページ
http://app.baidu.com/user/register

⑥91 Mobile Assistant

http://zs.91.com/feature/v4/index_android.shtml
登録にID番号が必要
申請ページ
http://market.sj.91.com/Users/Login.aspx
申請方法
http://ibbs.91.com/thread-2129799-1-1.html

⑦HiMarket

http://apk.hiapk.com/
開発者向けページのログインにBaiduのアカウントが必要

ghostlyIcons.は消して良いのか

GrandPerspective Mac

 

結論。消して良い。

以下を参考にしました。
http://stackoverflow.com/questions/16938659/can-i-safely-delete-the-contents-of-the-library-application-support-iphone-sim

現在、開発機にMacBookAirの128GBストレージのものを使っているのですが、容量的にカツカツになってきたのでいらないファイルの整理を行いました。

その中で、iPhoneシュミレーターのiOS6.1の一時ファイルと思われるディレクトリ「~/Library/Application Support/iPhone Simulator/6.1/tmp」の中身が1GB以上もファイルを持っており、容量を圧迫していることがわかりました。

ghostlyIcons.というのは見たことのないファイルなのでよくわからなかったのですが、リンク先によれば、tmpフォルダにあるものは基本的には削除して良いものだということです。

また、ghostlyIcons.自体がバグにより生成されたものなのではないかということも書いてありました。

というわけでghostlyIcons.のファイルを全部削除。
そもそもiOS6.1のシュミレーターは最近ほとんど使っていないので、なにか起きてもそれほど影響はないのですけどね。

GrandPerspective Macちなみにどのファイルやディレクトリが容量が大きいか、というのは、GrandPerspectiveというフリーソフトを使いました。

どのファイルがどれだけ容量を食っているのかを可視化してくれます。

Xcode5.1にしたら、cocos2dでエラーが出た

Xcode5.1にアップデートしたら、cocos2dで以下の様なエラーが出ました。

Redefinition of ‘__ccContentScaleFactor’ with a different type: ‘CGFloat’ (aka ‘double’) vs ‘float’

というわけでググったらこちらのページに解決法が載っていました。

http://www.cocos2d-iphone.org/forums/topic/redefinition-error-__cccontentscalefactor/

CCDirectorIOS.hの109行目です。

[objc]
// optimization. Should only be used to read it. Never to write it.
//extern CGFloat __ccContentScaleFactor; // CGFloatをfloatに修正
extern float __ccContentScaleFactor;
[/objc]

↑こんなかんじ。

同様に実装の方も修正。
CCDirectorIOS.mの66行目です。

[objc]
// CGFloat __ccContentScaleFactor = 1; // CGFloatをfloatに修正
float __ccContentScaleFactor = 1;
[/objc]

とりあえず動くようになりました。

オナ禁カウンターが累計一万ダウンロードを達成しました

おかげさまで、オナ禁カウンターが全世界累計1万ダウンロードを達成いたしました。

ダウンロードをしてくださいました皆様、ありがとうございます。
引き続き、改良を進めてまいります。

これからも「オナ禁カウンター」をよろしくお願い致します。

Google Chart Toolsのサイズの動的な変更

ブラウザのウィンドウサイズを変更した際に、Google Chart Toolsで描画したグラフを動的にサイズ変更する。

参考にしたページ
まず、グラフのオプションの「幅」の指定を無くす。

[javascript]

var options = {
title: ‘売上高の推移’,
//width: 800,
height: 500
}

[/javascript]

つぎに、<body>に追記

[html]

<body onresize="drawChart()">

[/html]

onresizeにグラフ描画のJavascriptメソッド(今回はdrawChart())を指定するだけ。
これでブラウザの幅に合わせてグラフの幅が変わる。

年と週番号を受けて、日付を返すJavascript の関数

2013年の第42週の日曜日が何日なのか、Date型で返す。

[javascript]

// 年と週番号を受けて、その週の最初の日にちを返す
function getBeginningOfTheWeekInTheYear(year, weekNumber){
// YYYY年1月1日のDateオブジェクト
var onejan = new Date(year, 0, 1);
// 曜日を取得(日=0, 月=1, 火=2, 水=3, 木=4, 金=5, 土=6)
var offset = onejan.getDay();
// 1月1日から日付を週数分進め、曜日分を引く
return onejan.setDate( onejan.getDate() + (weekNumber * 7) – offset);
}
[/javascript]

↓日付から週番号の取得はこちらを参考に。
Javascriptで年初からの日数/週数を取得する

ワードプレスの管理画面にベーシック認証を設定する。

WordPressの管理画面のセキュリティ強化のため、Basic認証の設定を行いました。

管理画面に入る際に、まずベーシック認証を経てから、ログイン画面になるという、2段階認証。

ベーシック認証画面
ベーシック認証画面
ワードプレス ログイン画面
ワードプレス ログイン画面

意外と詰まったので備忘のためメモ。

.htaccessの設定

.htaccess

[html]
# ベーシック認証を導入
<Files wp-login.php>
AuthUserFile /home/users/2/lolipop.jp-XXXXXXXXXXXX/web/.htpasswd
AuthGroupFile /dev/null
AuthName "Secret Area"
AuthType Basic

require valid-user
</Files>

<Files ~ "^.(htpasswd|htaccess)$">
deny from all
</Files>
[/html]

AuthUserFileにはフルパスと、最後に.htpasswdを書きます。
ロリポップの管理画面の場合、フルパスは「アカウント情報」に記載されています。
スクリーンショット 2013-11-26 14.34.11

.htpasswdの設定

.htpasswd

[html]
hoge:XFdMGsslDgYmo

[/html]

↑最後に改行が必要です。

パスワード用のファイル(.htpasswd)も書きます。
パスワードは生のままではダメなので、こちらのページから作成します。

スクリーンショット 2013-11-26 14.42.13

出来上がった2つのファイルを、wp-login.phpと同じディレクトリに設置します。
以上でベーシック認証のログインが追加されました。

iOSアプリの状態を確認する。起動中なのかバックグラウンドなのか。

iOSアプリが起動しているのか、バックグラウンドなのかを見る方法。

UIApplicationStateというクラスを使います。

[objc]
// アプリケーションの状態を見る。
UIApplicationState applicationState = [[UIApplication sharedApplication] applicationState];
NSString *state = @"Unknown";
if (applicationState == UIApplicationStateActive) {
// アクティブなとき
state = @"Active";
}else if(applicationState == UIApplicationStateBackground){
// バックグラウンドのとき
state = @"Background";
}else if(applicationState == UIApplicationStateInactive){
// アクティブじゃないとき
state = @"Inactive";
}
NSLog(@"アプリケーションの状態 : %@", state);
[/objc]

iOS7ではバックグラウンドでできることの幅が広がったので、これで状態をいろいろ確認しながらテスト開発できます。

iOS7 : Star Rating 星をタッチして5段階のレーティングができるUIView

star rating objective-c uiview

レーティング用のUI素材を作成しました。

star rating objective-c uiview

5つ並んだ星をタッチして、AppStoreのレビューのように0~5の値を入出力できるUI用のパーツです。わかりやすくするよう、星ひとつひとつの背景色に色をつけてあります。また、一番端の赤い領域に触れると、星を0として入力できます。

Githubにサンプルコード置きました。

こちらがUIViewのサブクラスStarRatingViewの本体。

StarRatingView.h

[objc]
#import <UIKit/UIKit.h>

@interface StarRatingView : UIView{
UIView * zeroView;
UIImageView * firstStarView;
UIImageView * secondStarView;
UIImageView * thirdStarView;
UIImageView * fourthStarView;
UIImageView * fifthStarView;
}

@property(nonatomic) int starValue;

@property(strong, nonatomic) UIImage * starImage;
@property(strong, nonatomic) UIImage * darkStarImage;

@end

[/objc]

StarRatingView.m

[objc]
#import "StarRatingView.h"

#define STAR_WIDTH(width) width / 5.5
#define FIRST_STAR_X(width) width / 11
#define SECOND_STAR_X(width) (3 * width) /11
#define THIRD_STAR_X(width) (5 * width) /11
#define FOURTH_STAR_X(width) (7 * width) /11
#define FIFTH_STAR_X(width) (9 * width) /11

@implementation StarRatingView

– (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code

// 初期値
self.starValue = 0;

// タッチができるようにする
self.userInteractionEnabled = YES;

// 星用のimageViewを作成
zeroView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, STAR_WIDTH(self.frame.size.width), self.frame.size.height)];
firstStarView = [[UIImageView alloc] initWithFrame:CGRectMake(FIRST_STAR_X(self.frame.size.width), 0, STAR_WIDTH(self.frame.size.width), self.frame.size.height)];
secondStarView = [[UIImageView alloc] initWithFrame:CGRectMake(SECOND_STAR_X(self.frame.size.width), 0, STAR_WIDTH(self.frame.size.width), self.frame.size.height)];
thirdStarView = [[UIImageView alloc] initWithFrame:CGRectMake(THIRD_STAR_X(self.frame.size.width), 0, STAR_WIDTH(self.frame.size.width), self.frame.size.height)];
fourthStarView = [[UIImageView alloc] initWithFrame:CGRectMake(FOURTH_STAR_X(self.frame.size.width), 0, STAR_WIDTH(self.frame.size.width), self.frame.size.height)];
fifthStarView = [[UIImageView alloc] initWithFrame:CGRectMake(FIFTH_STAR_X(self.frame.size.width), 0, STAR_WIDTH(self.frame.size.width), self.frame.size.height)];

// 星を作成
self.starImage = [UIImage imageNamed:@"star.png"];
self.darkStarImage = [UIImage imageNamed:@"star_black_a50.png"];

// 画像を指定
firstStarView.image = self.darkStarImage;
secondStarView.image = self.darkStarImage;
thirdStarView.image = self.darkStarImage;
fourthStarView.image = self.darkStarImage;
fifthStarView.image = self.darkStarImage;

// viewに追加
[self addSubview:zeroView];
[self addSubview:firstStarView];
[self addSubview:secondStarView];
[self addSubview:thirdStarView];
[self addSubview:fourthStarView];
[self addSubview:fifthStarView];

// 背景色を変更
zeroView.backgroundColor = [UIColor redColor];
firstStarView.backgroundColor = [UIColor orangeColor];
secondStarView.backgroundColor = [UIColor yellowColor];
thirdStarView.backgroundColor = [UIColor greenColor];
fourthStarView.backgroundColor = [UIColor blueColor];
fifthStarView.backgroundColor = [UIColor purpleColor];
self.backgroundColor = [UIColor grayColor];

}
return self;
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
– (void)drawRect:(CGRect)rect
{
// Drawing code
}
*/

// タッチ開始
– (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:self];
//NSLog(@"Began x:%f y:%f", location.x, location.y);
int starInt = [self calculateTouchLocation:location.x];
NSLog(@"Begin starInt : %d", starInt);
[self showStar:starInt];
self.starValue = starInt;
}

// タッチ移動
– (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:self];
//NSLog(@"Moved x:%f y:%f", location.x, location.y);
int starInt = [self calculateTouchLocation:location.x];
//NSLog(@"Moved starInt : %d", starInt);
[self showStar:starInt];
self.starValue = starInt;
}

// タッチ終了
– (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint location = [touch locationInView:self];
//NSLog(@"Ended x:%f y:%f", location.x, location.y);
int starInt = [self calculateTouchLocation:location.x];
NSLog(@"Ended starInt : %d", starInt);
[self showStar:starInt];
self.starValue = starInt;
}

// 座標を0~5の数値に変換
-(int)calculateTouchLocation:(double)locationX
{
int starInt = 0;
if (locationX < FIRST_STAR_X(self.frame.size.width)) {
starInt = 0;
}else if (locationX >= FIRST_STAR_X(self.frame.size.width) && locationX < SECOND_STAR_X(self.frame.size.width)){
starInt = 1;
}else if (locationX >= SECOND_STAR_X(self.frame.size.width) && locationX < THIRD_STAR_X(self.frame.size.width)){
starInt = 2;
}else if (locationX >= THIRD_STAR_X(self.frame.size.width) && locationX < FOURTH_STAR_X(self.frame.size.width)){
starInt = 3;
}else if (locationX >= FOURTH_STAR_X(self.frame.size.width) && locationX < FIFTH_STAR_X(self.frame.size.width)){
starInt = 4;
}else if (locationX >= FIFTH_STAR_X(self.frame.size.width)){
starInt = 5;
}else{
starInt = 0;
}
return starInt;
}

-(void)showStar:(int)value{
switch (value) {
case 0:
firstStarView.image = self.darkStarImage;
secondStarView.image = self.darkStarImage;
thirdStarView.image = self.darkStarImage;
fourthStarView.image = self.darkStarImage;
fifthStarView.image = self.darkStarImage;
break;

case 1:
firstStarView.image = self.starImage;
secondStarView.image = self.darkStarImage;
thirdStarView.image = self.darkStarImage;
fourthStarView.image = self.darkStarImage;
fifthStarView.image = self.darkStarImage;
break;

case 2:
firstStarView.image = self.starImage;
secondStarView.image = self.starImage;
thirdStarView.image = self.darkStarImage;
fourthStarView.image = self.darkStarImage;
fifthStarView.image = self.darkStarImage;
break;

case 3:
firstStarView.image = self.starImage;
secondStarView.image = self.starImage;
thirdStarView.image = self.starImage;
fourthStarView.image = self.darkStarImage;
fifthStarView.image = self.darkStarImage;
break;

case 4:
firstStarView.image = self.starImage;
secondStarView.image = self.starImage;
thirdStarView.image = self.starImage;
fourthStarView.image = self.starImage;
fifthStarView.image = self.darkStarImage;
break;

case 5:
firstStarView.image = self.starImage;
secondStarView.image = self.starImage;
thirdStarView.image = self.starImage;
fourthStarView.image = self.starImage;
fifthStarView.image = self.starImage;
break;

default:
firstStarView.image = self.darkStarImage;
secondStarView.image = self.darkStarImage;
thirdStarView.image = self.darkStarImage;
fourthStarView.image = self.darkStarImage;
fifthStarView.image = self.darkStarImage;
break;
}
}

@end

[/objc]

設置方法

実装するときはStarRatingViewオブジェクトをaddSubViewすれば設置できます。
viewControllerなどにこんなかんじで設置します。

[objc]
StarRatingView *starRatingView = [[StarRatingView alloc] initWithFrame:CGRectMake(10, 100, 275, 50)];
[self.view addSubview:self.starRatingView];
[/objc]

値を出し入れするときは、「starRatingView.starValue」からアクセスします。

Githubにサンプルコード置きました。

 

iOS7 StarRating