WEB関連全般

iOSアプリの審査に落ちたこと

Androidアプリは拍子抜けするぐらい簡単にリリースできるんですが、やはりiOSアプリのリリースは難しいです。

審査に落ちた事項について、メモっておきたいと思います。(まあガイドライン読めって話なんですが・・・・)

1.起動に時間かかりすぎ

Guideline 4.0 - Design

サーバーで更新した内容をアプリにも反映させるという仕組みだったため、初回起動時に更新したファイルをすべてアプリ側に落とす仕組みにしてたんですが、さすがに画像ファイルなどまで落とすとなると数分かかってしまうため、ここで却下されてしまいました。

画像はWEBに取りに行く仕組みに変更し、初回起動は30秒内でできるようになったため、これはクリア

 

2.位置情報取得する理由をちゃんと書け

Guideline 5.1.5 - Legal - Privacy - Location Services

位置情報を取得する仕組みがあるんですが、アプリに限らずブラウザとかで初回取得時って

「”(アプリ名)”の使用中に位置情報の利用を許可しますか?」

ってメッセージが出ますよね。↓こんなやつ

デフォルトのメッセージがだけが表示されるようになっていたのですが、それに加えて説明文もいるようです。

参考サイト:iOS 8 以降のプライバシーと位置情報サービスについて - Apple サポート

今回はmonacaで開発していたので、config.xmlファイルに下記の記述を追記しました。


<platform name="ios">
・・・
<config-file platform="ios" target="*-Info.plist" parent="NSLocationWhenInUseUsageDescription">
<string>コースのどの場所にいるのかを確認するために位置情報を取得します。</string>
</config-file>
・・・
</platform>

これで、メッセージ表示時にも上記のメッセージが表示されるようになりましたし、このアプリの位置情報設定画面でも表示されるようになりました。

アプリ使用中のみ許可なら、parentは「NSLocationWhenInUseUsageDescription」、常に許可の場合は「NSLocationAlwaysUsageDescription」となります。

参考サイト:

 

次こそは頼む=人=

【追記】

上記修正後、2日後に無事審査通りました。ε-(´∀`*)

総合管理者 | 2018年01月31日 | コメント(0) | トラックバック(0) | WEB関連全般 | アプリ関連

EC-CUBE2系でドメイン変更するとログインできなくなる

EC-CUBE2系を、テスト環境URLで構築して、本番環境URLに変更すると、サイト自体は表示されますが、ログインできなくなることがあります。

URLを変更する際は、まず「/data/config/config.php」の下記の部分を変更します。

define('HTTP_URL', 'http://xxxxxxxx/');
define('HTTPS_URL', 'https://xxxxxxxx/');

しかしこれだけ変更しても、管理画面にログインしようとするとシステムエラーとなってしまいました。

同じく、config.phpのAUTH_MAGICを変更するとよいという情報を得たので変更してみたのですがうまくいかず。(最終的にはこれは変更しないほうがよかったです※)

ということで、追加で下記を実行

  • データベースの、dtb_sessionテーブルを空にする
  • 「data/Smarty/templates_c」の「admin」フォルダとサイトテンプレート用フォルダを空にする。
  • ブラウザを立ち上げ直す(orブラウザを変えてみる)

これで正常にログインできるようになりました!

※AUTH_MAGICを変更していると、上記の3つを実行しても、「ログインIDとパスワードが間違っています」というエラーになりログインできなくなります。
元に戻したら、ログインできるようになりました。

総合管理者 | 2018年01月22日 | コメント(0) | トラックバック(0) | CMS関連

タイトル・内容のフック場所【WordPress】

タイトル・内容のフック場所は、フロントエンド、管理画面で異なるので注意が必要です。

フロントエンドの場合


//タイトルにフックをかける(the_titleをフック)
add_filter('the_title', hoge_the_title, 1);

//内容にフックをかける(the_contentをフック)
add_filter('the_content', hoge_the_content, 1);

バックエンドの場合


//投稿一覧のタイトル表示にフックをかける(the_postをフックし、内部で処理)
add_filter('the_post', hoge_the_post, 100);
function hoge_the_post($post){
//$post->post_titleを編集する 例:$post->post_title = htmlspecialchars($post->post_title);
return $post;
}

//編集画面のタイトル入力フィールドにフックをかける(title_edit_pre'をフック)
add_filter('title_edit_pre', hoge_the_title, 1);

//編集画面の内容フィールドにフックをかける(the_editor_contentをフック)
add_filter('the_editor_content', hoge_the_content, 1);

 

単純に、the_titleやthe_contentにフックするだけでは、管理画面の方で反映してくれないので注意。

特に投稿一覧では、表示だけならthe_titleのフックで行けますが、クイック編集の方にも反映させる場合は、the_postにフックし、$post->post_titleに処理を加える必要があります。

総合管理者 | 2018年01月08日 | コメント(0) | トラックバック(0) | CMS関連

イベントトラッキングがリアルタイムに反映されない?

リンクをクリックした回数を計測するため、色々なサイトを参考に、リンクタグに下記を追記しました。

onclick="ga('send', 'event', '(イベントカテゴリ名)', '(アクション)', '(イベントラベル)');"

しかし、アナリティクスのリアルタイム>イベントを見ながらクリックしても全然反映されない・・・

タイムラグが有るのかな~、でも秒って書かれるくらいにはリアルタイムなのでは?と思い、他にも検索していると、このような記事が

イベントトラッキングで数字が上がってこない。 - Google 広告主コミュニティ

どうやら書き方が異なるようだ

onclick="gtag('event', '(アクション)', {'event_category': '(イベントカテゴリ名)','event_label': '(イベントラベル)'});"

アナリティクスのコードを埋め込む際、コードがかなり変わってるな~とは思っていたのですが、こちらの記述もかなり変わったみたい。

これに変えてクリックしたところ、リアルタイムにも反映されるようになりました。

総合管理者 | 2017年12月29日 | コメント(0) | トラックバック(0) | JavaScript関連 | SEO関連

cakephpでエラー表示

cakephpでバリデーションチェックにひっかかりエラーになった場合、ほっておいても入力フィールドの下にエラーが表示されます。

ただし、inputのtypeがtextの場合は、そのまま表示されるのですが、textareaの場合は、エラーになってもエラーが表示されません。

その場合は、任意に入力フィールドの直後に下記を追記します。

echo $this->Form->error('モデル名.フィールド名');

例:

echo $this->Form->error('User.name');

これでtextareaなどエラーが表示されないタイプのものでも表示されるようになります。

総合管理者 | 2017年12月18日 | コメント(0) | トラックバック(0) | PHP関連

スラッグ名の重複対策

【WordPress】スラッグ名が重複すると、公開中の投稿ページが404になる

の記事で、スラッグ名を任意に設定した場合で、そのスラッグ名が重複し、下書き保存すると、すでに公開している同スラッグ名の記事が404エラーになることがある不具合について記述いたしました。

今のところWordpressでその対策が打たれている様子は無さそうです。

ということで、若干無理やりですが下記の方法で対応することにしました。

functions.phpに下記を追記します。

//保存した時、重複対策の文字列(_draft_記事ID_現在の日付)を追記する
function change_post_name($post_id){
	if(!wp_is_post_revision($post_id) && !wp_is_post_autosave($post_id)){
		$get_post = get_post($post_id);
		if(!empty($get_post->post_name)){
			remove_action('save_post', 'change_post_name', 13, 2 );
			$explode_word = "__savedraft__".$post_id."_";
			
			//下書き・レビュー待ちの場合は対策の文字列追加
			if($get_post->post_status == "draft" || $get_post->post_status == "pending"){
				$tmp_post_name = explode($explode_word, $get_post->post_name);
				$post_name = $tmp_post_name[0]."__savedraft__".$post_id."_".date_i18n("YmdHis");
				
				wp_update_post( array( 'ID' => $post_id, 'post_name' => $post_name) );
			}
			//公開・非公開・予約済の場合は対策の文字列を外す
			elseif($get_post->post_status == "publish" || $get_post->post_status == "private" || $get_post->post_status == "future"){
				$tmp_post_name = explode($explode_word, $get_post->post_name);
				$post_name = $tmp_post_name[0];
				
				wp_update_post(array('ID' => $post_id, 'post_name' => $post_name));
			}
			add_action('save_post', 'change_post_name', 13, 2 );
		}
	}
}
add_action('save_post', 'change_post_name', 13, 2 );

//編集を開いた時、重複対策の文字列を削除する
function restore_post_name($post_name, $post){
	if(is_admin()){
		//postとは限らないので投稿データかを確認
		if(!empty($post->post_name)){
			$explode_word = "__savedraft__".$post->ID."_";
			$tmps = explode($explode_word, $post_name);
			$post_name = $tmps[0];
		}
	}
	
	return $post_name;
}
add_filter('editable_slug', 'restore_post_name', 99, 2);

 

要するに

  • 下書きやレビューなどの場合は、後ろに文字列を付ける。
  • 公開や予約公開など、スラッグ名が確定する場合は、その文字列を削除して保存し直す。
  • 編集画面などでスラッグ名を表示する場合も、後ろの文字列は非表示にする(わずらわしいので)

という対応となります。

こんなんで本当に大丈夫かな~と思いますが、とりあえずはちゃんと動いてるっぽい。
注意点としては、スラッグ名(postname)はデータベース上200文字しかいれることが出来ないので、この重複対策の文字列を入れることで超えるようなら不具合が起こりえます。(重複対策文字列は、上記の例だと最長48文字。なので152文字(全角で76文字)より多くスラッグ名を設定すると、多分バグる)

動作保証はいたしませんのであしからず!

総合管理者 | 2017年12月14日 | コメント(0) | トラックバック(0) | WEB関連全般

固定ページにも抜粋をつける

固定ページでも、子ページを一覧で表示するなどの使い方をする場合があります。

その際に任意に設定できる抜粋がないと非常に困る(WPデフォルトでは無い)

固定ページでも抜粋を付ける場合は、使用しているテーマのfunction.phpにこれを追記します

add_post_type_support( 'page', 'excerpt' );

これで固定ページの編集画面にも抜粋が表示されるようになります

 

総合管理者 | 2017年12月14日 | コメント(0) | トラックバック(0) | CMS関連

includeしたものを変数に入れる【PHP】

例えば

<?php
echo "Hello world";
?>

という内容が書かれた、「include_hoge.php」というファイルがあるとします。

そして、これを別のファイル(hoge.php)で読み込み、include_hoge.phpの出力内容を変数に入れたいと思うことがあります。(実際はこんな単純な出力内容ではありませんが)

単純に考えると

$hensu = include(include_hoge.php);

となりますが、当然ながらこれではうまく行きません。

変数に放り込まれないどころか、ただ単にechoされた内容が表示されてしまいます。

 

次に考えられる方法は「file_get_contents」を使うことかと思います。

$hensu = file_get_contents("http://xxxxxx.net/include_hoge.php");

とすることにより、include_hoge.phpの出力内容を変数に入れることが出来ます。

しかし、そもそも「file_get_contents」が使用できないように制限されているサーバーや、include_hoge.phpにベーシック認証をかけている場合は取得ができません。(問題がなければこの方法でも良いかと思います)

 

最終的な方法としては下記となります。

ob_start();
include(include_hoge.php);
$hensu = ob_get_contents();
ob_end_clean();

これで、「file_get_contents」同様、「include」でも出力内容を変数に入れることが可能となります。

総合管理者 | 2017年12月13日 | コメント(0) | トラックバック(0) | PHP関連

wp_insert_attachmentだけではサムネイルが作られない

フォームから送られてきたファイルをメディアに登録されるようにするプログラムを作っていたのですが、実際にメディアには登録されるけど一覧でサムネイルが表示されない・・・

で、Codexをよく見たら、wp_insert_attachmentのあとに下記2つの関数も実行しなくてはならないとのこと

wp_generate_attachment_metadata
wp_update_attachment_metadata

さらにこの関数を実行するには、

require_once( ABSPATH . 'wp-admin/includes/image.php' );

の必要があります。

つまりこんな感じ。


require_once( ABSPATH . 'wp-admin/includes/image.php' );

$attachment = array(
'guid' => "(ファイルのURL)",
'post_mime_type' => "(ファイルのタイプ)",
'post_title' => "(ファイルのタイトル)",
'post_content' => '',
'post_status' => 'inherit'
);

$attach_id = wp_insert_attachment( $attachment, "(ファイル名)", 0);
$attach_data = wp_generate_attachment_metadata( $attach_id, "(ファイルのパス)");
wp_update_attachment_metadata( $attach_id, $attach_data );

これで、メディアに登録される際にサムネイルも生成されるようになりました。

総合管理者 | 2017年12月13日 | コメント(0) | トラックバック(0) | CMS関連

[半角/全角]キーで入力タイプを切り替えるたびに出る通知がうざい【Windows10】

Windows10のアップデートをしたら、[半角/全角]キーで入力タイプを切り替えるたびに、なんか画面の真ん中に「あ」「A」と表示されるようになりました。

すぐ消えるので良いけど、その裏で入力とかしていると煩わしくてしょうがない。

これを非表示にする方法についてはいろいろなサイトで紹介されています。

でも、自分のPCでは、右クリックしても下図のように表示されて、なぜかプロパティが選択できない。(Google 日本語入力を入れてるから?)

このような場合は、まず一番下にある「設定」を選択してください。

そうすると、下のようなウィンドウが開きますので、右にある「オプション」を選択してください。

言語のオプションウィンドウが開きますので、入力方式「Microsoft IME」の右にある「オプション」を選択してください。

これでようやくMicrosoft IMEの設定ウィンドウが開くので、「IME入力モード切替の通知」の「画面中央に表示する」のチェックを外して、「OK」ボタンを押してください。

言語のオプションウィンドウに戻ったら「保存」ボタンも押してください。

これで切り替えるたびに通知されることが無くなります。

 

総合管理者 | 2017年07月17日 | コメント(0) | トラックバック(0) | WEB関連全般

Copyright(c) 2010 - 2018 ダリの雑記