「LINEウェブストアにログインできませんでした」てうざくね?

なんかたくさんくるんだけども

20140821-142630

IPアドレスを表示してリンクになってるけど, そこにアクセスしろ, ってことに見えるけどなんか意味あるのだろうか.

IPアドレスを検索してみるとそこはインドネシア.

IPアドレス&所在地検索_IP_Geolocation_Search

IPアドレス&所在地検索 IP Geolocation Search

まあ, どちらにしろ自分ではないのはわかってる.

そして, ヘルプページにいく.

20140824-183645

第三者にログインされてない場合は, このLINEからのメッセージは来続けるのか.

「パスワード変更」を促されるけど, パスワードを変更しても, このメッセージてくるんだろ?

かんたんな文字列のパスワードを設定している人への警告にはなるのか.

ふと, 自分のスマホのIPアドレスなんだろうと, 簡単に調べてみたら, なんと Google-Proxy とか.

20140824-184711

診断くん

2013年3月6日 の記事とか, あたしは化石か.

Chrome for Androidのベータに、モバイルのChromeユーザのWeb閲覧を高速化し帯域を節約するための新機能を実装した、と発表した。それは一種のプロキシサーバ機能で、この機能をonにしておくと、ユーザのWebリクエストとそれに対するレスポンスがすべてGoogleのサーバを経由するようになり、そこでGoogleは同社のPageSpeedライブラリを使ってコンテンツを圧縮し最適化する。

Chrome for AndroidではWeb通信がGoogleのプロキシサーバを経由する - TechCrunch

正しいIPアドレスは FORWARD系の情報として表示されてる.

20140824-185349

フツーに端末で,「設定」-「端末の状態」で見れるのか.

20140824-185931

あ,

で, LINEのメッセージ止めるのはどうしたらいいんだたけか.

メールアドレスの変更しかないの?

関係者の方はご苦労様です.


Youtube Player を Fragment に埋め込む

今や公開されてるAPIも多すぎて...

プレーヤーを WebView なしで埋め込みたいだけなのに...

YouTube_—_Google_Developers

YouTube — Google Developers

いちいち調べるのが面倒なので手順メモ.

・ libs/ 以下にタウンドードした jar を置く.

dependencies {
    compile files('libs/YouTubeAndroidPlayerApi.jar')
}

・ API11+ であれば全て使える.
DEVELOPER_KEY を取得する必要がある.

・ 画面の回転時の再読み込みを AndroidManifest.xml で考慮.

    <activity
        ...
        android:screenOrientation="nosensor"
        android:configChanges="orientation|screenSize|keyboardHidden”>

・ YouTubeFailureRecoveryActivity 作成する.

public abstract class YouTubeFailureRecoveryActivity extends YouTubeBaseActivity implements
    YouTubePlayer.OnInitializedListener {

  private static final int RECOVERY_DIALOG_REQUEST = 1;

  @Override
  public void onInitializationFailure(YouTubePlayer.Provider provider,
      YouTubeInitializationResult errorReason) {
    if (errorReason.isUserRecoverableError()) {
      errorReason.getErrorDialog(this, RECOVERY_DIALOG_REQUEST).show();
    } else {
      String errorMessage = String.format(getString(R.string.error_player), errorReason.toString());
      Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show();
    }
  }

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == RECOVERY_DIALOG_REQUEST) {
      // Retry initialization if user performed a recovery action
      getYouTubePlayerProvider().initialize(DeveloperKey.DEVELOPER_KEY, this);
    }
  }

  protected abstract YouTubePlayer.Provider getYouTubePlayerProvider();

}

・ Activity の親に YouTubeFailureRecoveryActivity を.

public class PlayerViewDemoActivity extends YouTubeFailureRecoveryActivity {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.playerview_demo);

    // 処理開始
    YouTubePlayerView youTubeView = (YouTubePlayerView) findViewById(R.id.youtube_view);
    youTubeView.initialize(DeveloperKey.DEVELOPER_KEY, this);
  }

  @Override
  public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player,
      boolean wasRestored) {
    if (!wasRestored) {
      player.cueVideo("wKJ9KzGQq0w”); // 動画ID
    }
  }

  @Override
  protected YouTubePlayer.Provider getYouTubePlayerProvider() {
    return (YouTubePlayerView) findViewById(R.id.youtube_view); // プレーヤーID
  }

}

・ レイアウト (layout/playerview_demo.xml)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

  <TextView
      android:layout_width="match_parent"
      android:layout_height="0dp"
      android:layout_weight="1"
      android:textAppearance="@android:style/TextAppearance.Small"
      android:gravity="center"
      android:text="@string/playerview_text"/>

  <com.google.android.youtube.player.YouTubePlayerView
      android:id="@+id/youtube_view"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"/>

</LinearLayout>

という雰囲気.

Fragment 内に埋め込むなら, Activity が固定されてるものとして,

   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

     int section = getArguments().getInt(ARG_SECTION_NUMBER);
     View rootView = inflater.inflate(R.layout.playerview_demo, container, false);


     // 処理開始
     YouTubePlayerView youTubeView = (YouTubePlayerView) rootview.findViewById(R.id.youtube_view);

     youTubePlayerFragment.initialize(DeveloperKey.DEVELOPER_KEY,
                                      (YouTubePlayer.OnInitializedListener)getActivity());
   }

YouTube Android Player API - YouTube — Google Developers
サンプルアプリケーション - YouTube — Google Developers


「Google Play 開発者サービスのバージョン 5208000 を使用する APK をアップロードしました。バージョン 5100000 以下を使用してください。」でアップロードできない

なんなんだろうな, まじで.

APK_-_Google_Play_Developer_Console

バージョン 5100000 以下を使用してください

と書いてるので最新バージョンは, 5.1.00 と推定.

dependencies {
    compile "com.google.android.gms:play-services:5.1.00"
}

アウチ.

きっと, ベストな バージョンは 「5.0.89」なのでしょうね?

dependencies {
    compile "com.google.android.gms:play-services:5.0.89"
}

なんか, ここら, 最近あやしい...

「Google Play services out of date. Requires 5208000 but found 5089036」といってるけどこれは?


「Google Play services out of date. Requires 5208000 but found 5089036」といってるけどこれは?

こんなのではじめてますけど.

Google Play services out of date.  Requires 5208000 but found 5089036
GooglePlayServices not available due to error 2

1日以内の現象っぽい.

端末側のバージョンが古いのか.

20140809-080728

ネット上にあちこち出始めてるけど, これがまともっぽい.

java_-_After_update_-_crash_com_google_android_gms_play-services_5_2_8_-_Stack_Overflow

java - After update - crash com.google.android.gms:play-services:5.2.8 - Stack Overflow

アップデートがくるのをじっとまつか, 新しいバージョンの apk を探していれるか, しかなさげ.

compile 'com.google.android.gms:play-services:+'

開発リポジトリの先走りなのか, 配布の遅れなのか,

いや, もしかして API20 ?

とりあえず, 固定にしといたけど...

build_gradle

なんか最近ドタバタしてるようなー

Play Services 5.0.77 Deleted From Repo - Google グループ

Admob (gms 5.0.77) の吐いてた java.lang.NullPointerException が終わる件


gradle なら AndroidManifest.xml 内 <uses-sdk> が不要だった件

_uses-sdk____Android_Developers

Android Studio が警告なフキダシを出してる.

main_AndroidManifest

記述が2箇所あってきもちが悪かったのですが.

build.gradle

android {
    ...
    defaultConfig {
        minSdkVersion 9
        targetSdkVersion 19
    }
    ...
}

AndroidManifest.xml

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="19"/>

Android Studio の設定で「バージョン」の記述してるとこありすぎね?

で, AndroidManifest.xml側の記述は不要らしい.

Gradle overrides the manifest values, and I prefer to update build.gradle file rather than manifest. And probably this is the right way using Gradle. Gradle supports product flavours which can be controled via IDE and those product flavors can change many things in our Manifest like package name, version code, version name, target SDK and many other. Then by one click in Android Studio You can change many properties and generate another apk.

You can left the manifest as it is and do all configuration in build.gradle. You can safely remove

<uses-sdk></uses-sdk>

from manifest as well as version codes.

Android studio: why are minSdkVersion and targetSdkVersion specified both in AndroidManifest.xml and build.gradle? - Stack Overflow

Gradle が自動埋め込んでくれるっぽい.

apk化後, バラしてみてみると確認できます.

android-apktool - A tool for reverse engineering Android apk files - Google Project Hosting