顯示具有 教學 標籤的文章。 顯示所有文章
顯示具有 教學 標籤的文章。 顯示所有文章

2021年2月3日 星期三

Flutter 開發文件之 iOS 與 Android 實作筆記 - 使用 Admob 以 Interstitial ads 為例


關於 flutter 使用 Admob 的架構,可參考網路上數篇文章:
此例筆記 iOS & Android 的設定方式,並且記錄碰到的錯誤訊息。

Android app 設定方式:

1. 更新 flutter_app/pubspec.yaml 添加 dependencies (記得要運行 flutter pub get)

firebase: ^8.0.0
firebase_admob: ^0.11.0+1

2. 安置從 Firebase 建立專案時得到的 google-services.json 檔案,擺在 flutter_app/android/app/ 中

3. 更新 flutter_app/android/build.gradle 的 buildscript -> dependencies 設定

//classpath 'com.android.tools.build:gradle:3.5.0'
// 為了修正錯誤訊息:error: unexpected element <queries> found in <manifest>.
classpath 'com.android.tools.build:gradle:4.0.0'
classpath 'com.google.gms:google-services:4.3.3'

4. 更新 flutter_app/android/gradle/wrapper/gradle-wrapper.properties 的 gradle 版本至 6.1.1

#為了修正錯誤訊息:Minimum supported Gradle version is 6.1.1. Current version is 5.6.2. If using the gradle wrapper
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip

5. 增加 flutter_app/app/build.gradle 的 apply 項目

apply plugin: 'com.google.gms.google-services'

6. 更新 flutter_app/android/app/src/main/AndroidManifest.xml 添加 meta data (僅範例程式數值)

<meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-3940256099942544~3347511713"/>

7. 更新 flutter_app/lib/main.dart (此改自於範例程式,讓 add Button 可以產生一個插頁廣告)

iOS app 設定方式:

1. 更新 flutter_app/pubspec.yaml 添加 dependencies(記得要運行 flutter pub get)

firebase: ^8.0.0
firebase_admob: ^0.11.0+1

2. 安置從 Firebase 建立專案時得到的 GoogleService-Info.plist ,用 Xcode 打開專案,把 GoogleService-Info.plist 拖拉擺入跟 Info.plist 的同階目錄位置。

% open flutter_app/ios/Runner.xcworkspace
% ls flutter_app/ios/Runner/GoogleService-Info.plist

3. 更新 Info.plist 內容,添加資訊 GADApplicationIdentifier 等資訊(僅範例程式數值)

<key>GADApplicationIdentifier</key>
<string>ca-app-pub-3940256099942544~1458002511</string>
<key>SKAdNetworkItems</key>
  <array>
    <dict>
      <key>SKAdNetworkIdentifier</key>
      <string>cstr6suwn9.skadnetwork</string>
    </dict>
  </array>

4. 更新 Podfile ,上方添加 platform :ios, '10.0'

為了修正錯誤訊息: 
Automatically assigning platform `iOS` with version `9.0` on target `Runner` because no platform was specified. Please specify a platform for this target in your Podfile.

5. 更新 flutter_app/lib/main.dart (此改自於範例程式,讓 add Button 可以產生一個插頁廣告)

如此就收工啦!而 flutter_app/lib/main.dart 內容如下:

import 'package:flutter/material.dart';

import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_admob/firebase_admob.dart';

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  MobileAdTargetingInfo targetingInfo = MobileAdTargetingInfo(
    keywords: <String>['flutterio', 'beautiful apps'],
    contentUrl: 'https://flutter.io',
    childDirected: true,
    nonPersonalizedAds: true,
  );

  InterstitialAd _interstitialAd;

  InterstitialAd createInterstitialAd() {
    return InterstitialAd(
      adUnitId: InterstitialAd.testAdUnitId,
      targetingInfo: targetingInfo,
      listener: (MobileAdEvent event) {
        print("InterstitialAd event $event");
      },
    );
  }

  @override
  void initState() {
    super.initState();
    FirebaseAdMob.instance.initialize(appId: FirebaseAdMob.testAppId);
    //_interstitialAd = createInterstitialAd()..load();
  }

  @override
  void dispose() {
    _interstitialAd?.dispose();
    super.dispose();
  }

  void _incrementCounter() {
    _interstitialAd?.dispose();
    _interstitialAd = createInterstitialAd()..load()..show();
    setState(() {
      _counter++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }
}

 

2019年6月15日 星期六

透過 BuyAndShip 購買 Amazon JP 的 Kindle Paperwhite 完整教學

Kindle Paperwhite

大概十年前,在工作上也算半隻腳踏入電子書領域,那時已經拿著幾台 Kindle 把玩,但最後投入了 iPad 懷抱 XD 在 2010 買了 iPad,沒想到 2019 年終於買一台 Kindle 來用用。這是台 Amazon JP 牌的 Kindle ,預設的商城是 Amazon JP。

事隔 10 年,拿到 Kindle 時,真的覺得很小台。記得 10 年前還沒這麼小?可能是當時有實體 keyboard 吧。長大概是兩張名片長,寬是兩張名片寬再多一點。

Kindle Paperwhite 02

這次是第一使用 BuyAndShip 服務,因為 Amazon JP Kindle 只能送貨到日本當地,就試試看在日本有倉庫的 BuyAndShip 國際網購代運。他是香港的公司,在世界幾處有倉庫,像我想買 Amazon JP Kindle 且Amazon JP把此商品限定寄送日本當地時,就把收信人填寫 BuyAndShip 在日本倉庫的地址,收信人則帶有自己在 BuyAndShip 的帳號資訊(姓名 + BuyAndShip 代號)。當 BuyAndShip 日本倉庫收件後,會立即再運到香港。BuyAndShip 用戶在填集運單發貨到台灣宅配收工。

整個 BuyAndShip 是秤重計費的。最近 BuyAndShip 台灣有活動,新建帳戶有 120 點數(若透過推薦人,首次交易完14天後又可以再多 200 點數),一點代表一塊台幣,而 120 點足以支付一磅的商品,而 Kindle 是 0.8 磅!若 Amazon JP 寄送到日本當地免運,那就沒有其他費用要支出,全程只有 Amazon JP 刷卡費(+銀行信用卡國際費用),理論上境外商品進台灣還有關稅問題,但這段我不是很懂,BuyAndShip.com.tw 在官網上說台灣的關稅他都包了 XD

www.buyandship.com.tw

整個流程:

1. 註冊 BuyAndShip 帳號( 若想再拿額外 200 點數,請點此 https://www.buyandship.com.tw/invite/2793172439/ 並且在推薦欄位上寫 2793172439

BuyAndShip 推薦朋友

2. 完成帳號註冊後,可在海外倉庫地址上,取得倉庫資訊,網頁上都有範例請你填寫收件人的方式,以及倉庫地址等等:

BuyAndShip 海外倉庫地址

後續就是 Amazon JP 為例,在此就不多提 Amazon JP 帳號的註冊等(其實有些可以台灣收件的商品,就可以不用靠 BuyAndShip 了)。接著在 Amazon JP 購物時,就填寫寄送到 BuyAndShip 倉庫,主要是收件人和地址要有 BuyAndShip 個人代號。

接著 Amazon JP 發貨後,會顯示是靠哪家公司寄送以及貨品追蹤碼:

AmazonJP發貨追蹤碼資訊

如此剩下的事就都在 BuyAndShip 網站了!首先填寫申報貨件

01申報貨件

02申報貨件確認

03完成申報貨件

如此就完成第一階段的任務,接下來就是等待,等待貨品寄送到日本倉庫!這時我覺得 BuyAndShip 最方便的地方是每一步都會有狀態回報。當商品寄送到倉庫後,除了 Amazon JP 可以查看送貨情況外,當然 BuyAndShip 也會更新狀態,將貨件狀態更改為海外入庫,而後續也不用做什麼,會自動再轉成準備海外出庫,進入海外出庫後,下一步就是香港倉庫:

04海外入庫

05海外出庫

在香港倉庫時,就可以填寫轉運單,這時就會挑選要宅配回台灣哪裡了,在此步就會要付錢給 BuyAndShip 囉!由於創建帳號有 120 點,就在此用點數支付完畢:

06香港倉庫

填寫完就進入轉運單追蹤:

08準備發貨-黑貓宅配

一開始還不會有宅配的資訊,大概過個1~2天就會出現(此例使用黑貓宅急便),雖然有單號了,還是查不到(因為黑貓只是把寄貨單發到各處,不代表已經被黑貓收件),如此,可以什麼都不管了,只等著黑貓寄貨到家囉。

收到商品後,看起來 BuyAndShip 也沒拆開,直接在包一層就寄出去了!

BuyAndShip

拆開後都是 Amazon JP 的包裝封套,拆開後是 Amazon JP 對商品的保護:

Kindle Paperwhite 04

Kindle Paperwhite 05

經過這次試用 BuyAndShip 後,覺得令人不安的地方都有被 BuyAndShip 不斷更新貨品狀態而解決了!加上在首次使用靠 120 點數而不用付費,更是降低戒心 XD 往後若有不能直寄台灣的商品,就還會再來用用看的。目前比較搞不懂的還是進台灣的關稅問題,目前 BuyAndShip 都說會自行吸收處理,未免太佛心了吧 :P 但 BuyAndShip 有限制商品大小,應當也是種自保機制。

2019年2月10日 星期日

Google Home mini 中文音控設定 與 幼兒教育、長輩戲劇 應用?

GoogleHomeMini

2018年夏天因加速公司研究音控服務,自己買了一台 Google Home mini ,研究的差不多後就擺晾在一旁,今天整理了一下,想說該拍賣掉了 XD 意外發現已經支援中文音控! 可搜尋 "Google Home mini 中文設定教學" 囉!據說這招是需要兩隻 Android 手機也能達成,由於我本身是用 iPhone,就必須搭配另一隻 Android 手機

在此簡介環境,需要:
  1. Google Home mini
  2. Android 手機
  3. iPhone 手機 
  4. Android 手機安裝 Google Home app ; iPhone 安裝 Google Home app 
  5. Android phone 跟 iPhone 上的 Google Home app 都綁定同一個 Google 帳號
首先開啟 Android phone 上的 Google Home app => 右下角"帳戶" => 設定 => Google 助理 => 語言 => 第一語言設定成 "中文(台灣)",並將第二語言設定成 "無",且要讓最下方 "選擇這些裝置的語言" 留白,不做任何選擇 (此時若仍顯示英文,就來靠 iPhone 或另一隻手機處理)

接著換 iPhone 開啟 Google Home app => 右下角"帳戶" => 往下滑到 "Google 助理" 區域,選擇 "更多設定" => 點擊 "Google 助理" 分頁 => "Google助理的聲音" => 把下方的英文也清掉,留下只有第一語言的中文(另外,iPhone 的 Google 助理語言不能選中文,要靠 Android phone 來處理)

後續你的 Google Home mini 就會講中文了!並且無論 Android 或 iPhone 的 Google Home mini ,進入 Google 助理 => 語言,都會看到最下方留白了:

Android Google助理-語言 iPhone Google助理-語言

接下來才是重頭戲 XD 若家裡也有 Chromecast 的話,小孩在吵的時候,就只要說:

OK Google, 請播放 Youtube 上的瑪莎與熊第一集

這樣就可以打發小孩了(誤),更別說還有一卡車正版戲劇可以隨叫隨播,長輩也能開開心心



當然,沒有 Chromecast 還有 Spotify !在台灣已經接近全平台可免費使用,可以直接說:

OK Google, 播放 K-POP 音樂

如此就可以聽聽韓流最新音樂,更別說南韓音樂的快速迭代,立刻有聽不完的韓流音樂

最後,無聊時可以多講講 OK Google ,想必小孩也會學的,接下來請谷歌小姐陪小孩講話唸故事了 XD