カテゴリーアーカイブ OS

村上 著者:村上

【Cordova】「cordova-plugin-fcm」で取得したトークンが登録されていない時の対処法

以前、「cordova-plugin-fcm」プラグインの getToken() でトークン取得できない時の対処法について紹介しましたが、こちらの方法で取得できたトークンが実は使えなかったので、さらなる対処法についてです。
一応下に以前の記事を載せておきますが、こちらは非推奨ですのでご注意ください。

【Cordova】プラグイン「cordova-plugin-fcm」のgetTokenでnullが返ってくるときの対処法
https://cpoint-lab.co.jp/article/201810/【cordova】プラグイン「cordova-plugin-fcm」のgetTokenでnullが返ってくると/

 

では、今回行った対応策ですが、まず Firebase Console Messaging の設定を確認します。
で、いつから変わったのかは知らないのですが、クラウドメッセージングの設定の APNs証明書を登録する項目で、この証明書に代わり、APNs 認証キーを設定できる様になっていました。
実際の画面はこちら。

推奨しているのは、こちらのAPNs 認証キーとのことでしたので、証明書からキーに変更します。
なお、認証キーは Apple DeveloperCertificates, Identifiers & Profiles ページから作成できます。
そして、この認証キーは一度しかダウンロードできないので、万が一にも消してしまわないように注意してください。

次に、Xcodeの設定です。
Xcode の Workspace Settings から、Build System を変更します。
恐らく、New Build System になっていると思いますので、これを Legacy Build System に変更します。

変更点は上記の2点です。
あとはいつも通り Build して実行したところ、無事に getToken() でトークンが取得できました!

 

以上、getToken() で null が返ってくるときの対処法でした。
Push通知に関しては、もしAndroidで問題なく動いているのなら、iOSの原因は十中八九 証明書周りのはずなので、まずはそのあたりを調査することをおすすめします。

  • この記事いいね! (0)
takahashi 著者:takahashi

Appleが突如10/30に発表会をスケジュール!何が発表されるのか気になる…

突如としてAppleがイベントの開催を告知しました。

Apple Special Event – Apple
速報:Apple、前代未聞の招待状で10/30イベント開催を告知 NYで何が発表されるか徹底予想 – engadget日本版

今度こそベゼルレスのiPad Proや新型macbookAirが発表されるのでは、という予想もたてられているようですね。

この前のGoogleのイベントで、Pixel3を”iPhone Xsよりも優れた製品”として大々的にアピールしたので、
こちとら黙ってはいられない…!
というところもあるかもしれませんね。

こちらの発表会イベントは日本時間で10/30(火)23:00から行われるとのことなので、この前のGoogleのイベントよりは見やすい時間帯となっています。

新製品発表の瞬間をリアルタイムで見られるチャンスですので、是非チェックしてみてはいかがでしょうか。

  • この記事いいね! (0)
asaba 著者:asaba

【ios】緊急速報を消す方法 ※非推奨です

今日も脱線気味です、すみません。

緊急災害警報のあのうるさい音を消す方法についてお話します。

少し前に強い台風が浜松を襲ったときに、風や雨音がうるさくとても眠れる状況ではありませんでした。

それだけならまだ耐えられたのですが、極めつけは携帯の緊急災害速報(怒)

何回鳴ったか分かりませんが、筆者を寝不足に陥れた張本人です。よく台風や大雨の時にジリジリ鳴っていますが実はこいつ消せます、簡単に。

まず、設定をタップします。その後に通知という赤いアイコンをタップしてください。

その後に一番下までスライドすると、緊急速報というリストがあります。通常は緑でonになっていると思うので、トグルをタップして

オフにします。たったこれだけで鳴らなくなります。

 

いかがでしたでしょうか。大げさだなと感じる人もいれば万が一の時に備えて鳴るようにしなきゃと心構えを持つ人もいるので

強くはお勧めしません。むしろ止めといた方が今後の為ですはい。

いつでもonにそんなもん怖くねーよゆっくり寝たいんだよ(# ゚Д゚)という方は試してみてください、自己責任ですけど。

はい、短いですが今日はこれでおしまいです。まじめな方は今日の記事は見なかったことにして災害に対応できるようにしてくださいね!

それでは!

 

P.S.これだと緊急地震速報も鳴らなくなるのかな・・・?それは怖いけど。

 

 

  • この記事いいね! (0)
村上 著者:村上

【Android】「Only the original thread that created a view hierarchy can touch its views.」の対処法

今日の記事は、Androidアプリ開発中に遭遇したエラーについてです。
修正はそこまで大変ではなかったのですが、使用頻度が低く、忘れそうだったので備忘録としてまとめます。

エラーは「Only the original thread that created a view hierarchy can touch its views.」というもので、こちらはメインスレッド以外で、TextView などの UI を変更しようとすると発生するエラーです。
シンタックスエラーとは違い、ビルドは通ってしまうので要注意ですね。

 

では、早速対処法についてご紹介。
今回参考にさせていただいたサイトはこちらです。

メインスレッド以外でUIを変更する方法 – Accele Biz IT開発技術 調査報告書
http://accelebiz.hatenablog.com/entry/2016/09/01/061934

エラーが発生したコードはこちら。

TextView textView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textView = findViewById(R.id.[ID名]);
    showMessage();
}

private void showMessage(){
    try {
        /* 処理 */
        textView.setText("[表示したい文字列]");
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

一部改変していますが、だいたいこんな感じ。
で、問題は、showMessage() 内の try/catch で指定した、setText() です。
やった事がなかったので知らなかったのですが、このようにメインスレッド以外で UI を操作することはできないようでした。

ですが、対処法もちゃんと用意されていました。
参考サイトそのままですが、Handler を使用して、別スレッドからメインスレッドに処理を依頼する方法です。
具体的には下記のとおりです。

private void showMessage(){
    final Handler mainHandler = new Handler(Looper.getMainLooper());
    try {
        /* 処理 */
        mainHandler.post(() -> {
            textView.setText("[表示したい文字列]");
        });
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

2行目に Handler を宣言し、TextView の操作の記述を mainHandler.post() で囲うだけです。
これを追加したところ、問題なく TextView の操作を行うことができました。

 

以上、TextView などの UI の操作をメインスレッド以外から行う方法でした。
今回の解決策は、例えば何らかの処理を別スレッド&非同期で行っていて、結果が返ってきたタイミングで UI を変更したい、等の場合にも使えるかと思います。
もし、同じエラーでお困りの場合は、是非参考にしていただければと思います。

  • この記事いいね! (0)
村上 著者:村上

【Cordova】プラグイン「cordova-plugin-fcm」のgetTokenでnullが返ってくるときの対処法

現在進行形で格闘中のアプリの修正の中で、解決したものがあったのでそれをご紹介。
タイトル通り、「cordova-plugin-fcm」で端末の一意のトークンを取得する getToken() で、なぜか取得した値が null になる時の対処法です。
他にも同じエラーに悩んでいる人はいたようだったので、ある程度簡単に情報はヒットしました。
で、今回参考にしたサイトはこちら。

getToken() returns ‘null’ only after install・Issues #104・fechanique/cordova-plugin-fcm・GitHub
https://github.com/fechanique/cordova-plugin-fcm/issues/104

 

解決策としましては、もしトークンが取得できなかった場合は、onTokenRefresh() を使って、トークンを再取得しなおす方法が良いとのこと。
実際のコードはこちら。

FCMPlugin.getToken(
    (token) => {
        if(token == null){
            FCMPlugin.onTokenRefresh(function(token){
                // onTokenRefresh() でトークンを取得時の処理
            });
        } else {
            // getToken() でトークンを取得した時の処理
        }
    },
    (err) => {
        // エラー時の処理
    }
);

こんな感じです。
もし、getToken() で取得したトークンが null だったら、onTokenRefresh() でトークンを再取得しています。
現時点では、問題なくトークンが取得できました!
取得できたトークンはデータベースに保存なりして、プッシュ通知の送付に使います。

…が、なぜか今度はプッシュ通知が送れず…。
Androidだと、上記のトークンが取得できない問題もなく、あっさりとプッシュ通知送付まで実装できたのですが、まさかiOSでつまづくとは…。
一難去ってまた一難という感じですが…引き続き頑張ります。

 

ということで、cordova-plugin-fcm プラグインでトークンが取得できない時の対処法でした。
同じことにお困りの方は、是非お試しください。

  • この記事いいね! (0)
asaba 著者:asaba

【cordova-react】プラグインについての豆情報(二つあります)

今日はお題は二つの小ネタです。一つ目はcameraプラグインについてです。

 

cordova-camera-pluginとphonegap-camera-pluginはコルドバでカメラを使うことができるプラグインです。

自分のファイルの中にこの両方が入っており、どちらか消しても問題ないだろうと思いcordova-camera-pluginを削除したのですが

動かなくなりました。慌てて入れ直すとあっさりと元通り。なんでニコイチやねんと思いました。

米国のサイトまでいって調べたのですが、原因は分からずじまいです。

 

二つ目はプラグインを入れるタイミングの話です。

cordova platform rm androidした後にプラグインを入れてadd platformすると下記の画像のように怒られます。

原因は確信ではないのですが、直前に入れたプラグインを記憶できないためだと思われます。

なので必ず新しいplatformを入れてからプラグインを導入してくださいね、という感じです。赤文字は怖いですが大抵グレイドルか

プラグイン関係なので恐れることはないと思います。

以上小ネタでした。

 

  • この記事いいね! (0)
takahashi 著者:takahashi

ついにPixel 3/Pixel 3 XL の日本発売が正式に発表!

ついに…

ついに!!!

Pixel 3/3 XL 正式発表キタ――――――――――――――――――――――(゚∀゚)――――――――――――――――――――――!!

Google Pixel 3 公式ティザーサイト

いやぁ来ましたね。

Pixel 3はAndroid開発元のGoogle自身が開発したAndroid端末の最新機種です。
見た目はGoogleのロゴが入っていること以外普通のスマートフォンなのですが、実は他のAndroidスマートフォンにはない特徴があります。

1.”Android OS開発元”のGoogleが直接ビルドした”純正のAndroid”が使える。

以前販売されていた”Nexus”シリーズ同様に開発元のGoogleが混ざりけなしのAndroidをインストールしているため、メーカーやキャリア製端末によくある”消せないアプリ”が最小限になっています。
また、メーカーによるAndroidの改造プロセスがない分Android最新版が出た時点でGoogleから直接アップデートを受け取れるため、ほかのAndroidスマホよりも早く新しいOSのバージョンが試せるのも魅力です。

2.Googleの最新機能がいち早く使える

Googleが作ったソフトウェアがそのまま入っているので、Googleが提供する新機能もいち早く試せます。
過去に、先代のPixel2に優先的に搭載された機能として、Googleアシスタント、GoogleLensなどがあります。
また、今回のPixel 3発売とともに、Googleアシスタントがユーザーの代わりに電話に応答し、迷惑電話を撃退してくれる機能も発表されました。

今後新たな機能の発表があった際も、(HWが対応していれば)Pixel 3にも優先的に提供されるとみられます。

3.カメラ性能
背面カメラは12.2 メガピクセルとSonyのXPeriaシリーズよりは劣りますが、光学ズームを搭載しており、Googleの得意分野であるAIを使用した強力な画像補正技術により、非常に綺麗な写真を撮ることができるとのこと。

また、暗いところでも綺麗に撮れるNight Sight機能、
シャッターチャンスを逃してしまっても、シャッターの前後の写真から一番良いものを後から選べる機能など、アマ以上のカメラマンも垂涎の機能がたくさん盛り込まれています。

今回の発表が特に盛り上がった理由として、こういった機能面だけではなく、日本発売が絶望視されてきたPixelシリーズの端末の日本国内発売がされた点があります。
以前の記事でも説明しましたが、日本ではNexusシリーズを最後に、Google純正の端末がしばらく発売されてきませんでした。

その分、久々の純正端末の発売決定は反響が特に大きかったようです。

最近発売されたiPhone XS/XR と単純に比較すると微妙なところではありますが、Google・Androidファンにとってはかなり魅力的な一台なのではないかなと思います。

  • この記事いいね! (0)
村上 著者:村上

【Android】Mapboxで表示した地図の中心を変更する方法

昨日の予告通り、今回はMapboxの地図の中心位置を変更する方法についてです。
前回の記事については、下記から確認頂けます。

【Android】Mapboxを使って地図上にピンを立てる方法
https://cpoint-lab.co.jp/article/201810/【android】mapboxを使って地図上にピンを立てる方法/

 

では早速実装方法について。
なお、今回のコードは Mapbox が導入済みであることを前提に進めています。

まず onCreate() 内に、下記のコードを追加します。

mapView.getMapAsync(this);

ちなみに、この時、Android Studioでは、this の部分がエラーになり、赤い波下線が引かれますので、そこにカーソルを合わせて Alt + Enter を押します。
表示される対処法の項目中に、OnMapReadyCallbackimplements するというような内容の候補があるので、こちらを選択します。
すると、onMapReady() という関数がオーバーライドされるので、その中に下記のコードを追加します。

@Override
public void onMapReady(MapboxMap mapboxMap) {
    CameraPosition position = new CameraPosition.Builder()
            .target(new LatLng(lat, lng)) // Sets the new camera position
            .zoom(11) // Sets the zoom to level 10
            .tilt(0) // Set the camera tilt to 0 degrees
            .build(); // Builds the CameraPosition object from the builder

    mapboxMap.animateCamera(CameraUpdateFactory.newCameraPosition(position), 1000);
}

ズームレベルや、傾きなどは適宜変更してください。
こちらを実行すると、起動後、カメラの位置が上記で指定した位置が中心になるように移動します。
処理としては以上で完了です。

 

意外と回りくどい方法だな…と思うのは私だけでしょうか…?
レイアウトファイルのXMLでは、地図の初期位置を簡単に指定できるので、コード上でも簡単にできてほしいですね。
ですが、意図していたことは実現できたので問題なし!
もし、同じことに取り組んでいる方は、参考にしていただければと思います。

  • この記事いいね! (0)
村上 著者:村上

【Android】Mapboxを使って地図上にピンを立てる方法

今回は、Mapboxを使って、Androidアプリで地図を表示する方法について。
導入は簡単でしたので、今回はそれプラス、地図にマップピンを立てたいと思います。

導入は本家サイトをご参考ください。
なお、マップの表示にはアクセストークンが必要なため、ユーザー登録を行ってください。

Install Maps SDK for android|Mapbox
https://www.mapbox.com/install/android/

上記で紹介している手順通りにSDKの導入やPermissionの設定、MapViewの指定を行えば、問題なく地図が表示できるはずです。
で、地図が表示されたら、いよいよマップピン表示!

コードは下記のとおりです。
重複している箇所があるので、必要なところのみコピー&ペーストしてください。

private MapView mapView;
private MapboxMap mapboxMap;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Mapbox.getInstance(this, "[access_token]");
    setContentView(R.layout.activity_map);

    mapView = findViewById(R.id.mapView);
    mapView.onCreate(savedInstanceState);
    mapView.getMapAsync(this);

    Double lng = [緯度];
    Double lat = [経度];
    mapView.getMapAsync(mapboxMap -> mapboxMap.addMarker(new MarkerOptions()
            .position(new LatLng(lat, lng))
            .title("写真を撮影した場所")));
}

こちらを実行すると、下の写真のようにマップピンが地図上に表示されます。

会社で撮影した写真の位置情報を使用したので、若干の誤差はあれど、ほぼあっていますね!

 

以上、地図上にピンを立てる方法でした。
しかしこれだけだと、マップの中心位置≠マップピンが立っている場所、なので、マップの中心位置やピンの場所によっては、地図をかなりスワイプしたりドラッグする必要がある場合があります。
次回は、こちらを解消すべく、地図の中心位置をコード上で操作する方法についてご紹介できればと思います。

  • この記事いいね! (0)
takahashi 著者:takahashi

Windowsの”付箋”機能が進化! ついにWindows端末間での同期が可能に

最近PCを使っていてふと気づいたのですが、

いつの間にかWindowsの付箋機能がパワーアップしていました。

起動直後は特に今までと変わりはないのですが、
タスクバーの付箋を右クリックして出てくるメニューの”すべてのメモ”をクリックすると…

付箋を一覧にして表示、さらには検索もできます。
使い勝手がGoogle Keepに似た形になりました。

さらに、

自動同期機能も搭載されました!
これは便利ですね。

アップデートしてもデータは引き継がれるようですので、普段から付箋機能を愛用している方は是非アップデートして使ってみてはいかがでしょうか。

  • この記事いいね! (0)