日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

HarmonyOS SDK接入

本章節介紹了HarmonyOS SDK的接入方法。

前言

本SDK基于HarmonyOS API 12 Release開發,compileSdkVersion 為 5.0.0(12)。

準備工作

  1. 請參考HarmonyOS應用開發文檔準備HarmonyOS應用開發環境。

  2. 請參考Native應用開發流程創建鴻蒙應用,在應用設置中查看AppKey和AppSecret。

  3. 請參考HarmonyOS Push Kit開發準備,配置應用,獲取鴻蒙Push Token。

  4. 請參考請求通知授權實現應用請求授權邏輯。

  5. 如需推送通知擴展消息,請參考發送通知擴展消息申請相關權益。

第一步:安裝SDK

在HarmonyOS應用根目錄執行以下命令來安裝SDK:

ohpm install @aliyun/push

ohpm工具及更多關于OpenHarmony安裝第三方SDK的信息請參考OpenHarmony三方庫中心倉說明。

SDK的最新版本及更新記錄請參考SDK信息更新記錄。

第二步:初始化SDK

在Ability onCreate生命周期回調中執行以下代碼初始化配置SDK:

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { aliyunPush } from '@aliyun/push';

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {

    // ************* 初始化配置 begin *************
    aliyunPush.init({
      appKey: '請填入在準備工作中查詢的應用AppKey',
      appSecret: '請填入在準備工作中查詢的應用AppSecret',
      context: this.context,
    })
    // ************* 初始化配置 end *************
  }

  // 省略其它代碼
}

其中appKey,appSecret請配置為在準備工作中獲取的AppKey和AppSecret。

第三步:設置推送回調接口

在UIAbility的onCreate回調方法中并且在初始化SDK之后設置推送回調接口,用于接收推送數據。示例代碼如下:

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { aliyunPush, ExtensionNotification, IPushListener, PushMessage, PushNotification } from '@aliyun/push';

// ************* IPushListener接口實現 begin *************
/**
 * 推送回調接口實現,用于接收推送數據
 */
class MyPushListener implements IPushListener {

  onReceiveNotification(data: PushNotification | ExtensionNotification): boolean {
    // 處理推送通知
    // 返回false 表示不定制通知。返回true,表示定制通知。
    return false;
  }

  onShowNotification(data: PushNotification | ExtensionNotification): void {
    // 處理通知展示事件
  }

  onReceiveMessage(data: PushMessage): void {
    // 處理推送消息
  }
}
// ************* IPushListener接口實現 end *************

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {

    aliyunPush.init({
      appKey: '請填入在SDK接入準備工作中查詢的應用AppKey',
      appSecret: '請填入在SDK接入準備工作中查詢的應用AppSecret',
      context: this.context,
    })

    // ************* 注冊IPushListener接口 begin *************
    aliyunPush.setPushListener(new MyPushListener());
    // ************* 注冊IPushListener接口 end *************
  }

  // 省略其它代碼

  onDestroy(): void {
  }

  onWindowStageCreate(windowStage: window.WindowStage): void {
    // Main window is created, set main page for this ability

    windowStage.loadContent('pages/Index', (err) => {
      if (err.code) {
        return;
      }
    });
  }

  onWindowStageDestroy(): void {
    // Main window is destroyed, release UI related resources
  }

  onForeground(): void {
    // Ability has brought to foreground
  }

  onBackground(): void {
    // Ability has back to background
  }
}

關于推送回調接口的詳細說明,請參考接收推送通知/消息

第四步:調用推送通知點擊處理接口

調用SDK的handleClickNotification方法,用于處理用戶點擊通知的行為,獲取推送的數據。調用的位置有兩處:

  1. 在UIAbility的onCreate回調方法中并且在初始化SDK之后

  2. 在UIAbility的onNewWant回調方法中

示例代碼如下:

import { aliyunPush, Channel,
  ExtensionNotification,
  PushMessage, PushNotification, PushNotificationHandler } from '@aliyun/push';
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';

// ************* 自定義推送數據的處理類 begin *************
class MyPushNotificationHandler implements PushNotificationHandler {
  onClickNotification(data: PushNotification | PushMessage | ExtensionNotification, from: Channel): void {
    // 根據業務處理推送的數據
  }

  noPushData(): void {
    // 沒有推送數據,不是用戶點擊推送通知拉起的界面
  }
}
// ************* 自定義推送數據的處理類 end *************

// 點擊通知要打開的Ability
export class TargetAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {

    // ************* 初始化Push begin *************
    aliyunPush.init({
      appKey: '請填入在準備工作中查詢的應用AppKey',
      appSecret: '請填入在準備工作中查詢的應用AppSecret',
      context: this.context,
    })
    // ************* 初始化Push end *************

    // ************* 處理推送數據 begin *************
    aliyunPush.handleClickNotification(want, new MyPushNotificationHandler())
    // ************* 處理推送數據 end *************

  }

  onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // 頁面已經啟動的場景
    // ************* 處理推送數據 begin *************
    aliyunPush.handleClickNotification(want, new MyPushNotificationHandler())
    // ************* 處理推送數據 end *************
  }

  // 省略其它代碼
}

關于handleClickNotification方法的詳細說明,請參考從通知中獲取推送數據。

第五步:注冊設備獲取設備ID

在UIAbility的onCreate回調方法中,初始化SDK之后,需要調用SDK的register方法注冊設備。

注冊設備是推送的必要步驟,在成功注冊設備之后,才可以請求注冊鴻蒙PushToken,綁定賬號、添加別名、綁定標簽等等一系列API。

示例代碼如下:

import { aliyunPush } from '@aliyun/push';

aliyunPush.register((err) => {
  if (err) {
    console.error(`注冊設備失敗,錯誤碼:${err.code} 錯誤信息${err.message}`);
    return;
  }
  console.info(`注冊設備成功,設備ID為${aliyunPush.getDeviceId()}`);
});

設備注冊成功后,SDK會和服務端建立長連接,此時就可以調用getDeviceId方法獲取設備ID,通過控制臺或者OpenAPI按終端向應用推送。

第六步:注冊鴻蒙PushToken(可選)

要使用鴻蒙廠商通道,需要通過SDK把鴻蒙的PushToken注冊到移動推送平臺。需要在注冊設備成功之后調用。示例代碼如下:

import { aliyunPush } from '@aliyun/push';
import { pushService } from '@kit.PushKit';
import { BusinessError } from '@kit.BasicServicesKit';

pushService.getToken().then((pushToken) => {
  // ************* 注冊PushToken begin *************
  aliyunPush.registerThirdToken(pushToken, (error) => {
    if (error) {
      console.error(`注冊PushToken失敗,錯誤碼:${error.code} 錯誤信息${error.message}`);
      return;
    }
    console.info(`注冊PushToken成功`);
  })
  // ************* 注冊PushToken end *************
}).catch((error: BusinessError) => {
  console.error(`獲取PushToken失敗,錯誤碼:${error.code} 錯誤信息${error.message}`);
})

關于鴻蒙廠商通道,請參考廠商通道

第七步:實現鴻蒙廠商通道的通知擴展消息接收(可選)

如果接入了鴻蒙廠商通道,同時要推送通知擴展消息,需要在接收到通知擴展消息時,調用SDK接口解析獲取推送數據,進行下一步操作。

RemoteNotificationExtensionAbility接收通知擴展消息的處理代碼示例如下:

import { pushCommon, RemoteNotificationExtensionAbility } from '@kit.PushKit';
import { aliyunPush, ExtensionNotification } from '@aliyun/push';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { common } from '@kit.AbilityKit';

export default class SampleRemoteNotification extends RemoteNotificationExtensionAbility {
  async onReceiveMessage(remoteNotificationInfo: pushCommon.RemoteNotificationInfo):
    Promise<pushCommon.RemoteNotificationContent> {
    // ************* 通知擴展消息處理 begin *************
    // 初始化推送參數,用于解析推送數據
    aliyunPush.init({
      appKey: '請填入在準備工作中查詢的應用AppKey',
      appSecret: '請填入在準備工作中查詢的應用AppSecret',
      context: this.context as common.Context,
    })

    // 調用parseExtensionPushData解析推送的參數
    const notification: ExtensionNotification = await aliyunPush.parseExtensionPushData(remoteNotificationInfo);

    // 這里可以獲取通知擴展消息的參數進行業務處理

    // SDK提供輔助方法getRemoteNotificationContent構建返回值, 傳參EntryAbility是本次通知點擊要打開的Ability名稱
    const result = aliyunPush.getPushHelper().getRemoteNotificationContent('EntryAbility', notification);
    return result;
    // 如果要修改通知的內容,可以返回想要修改的內容,wantAgent建議還是保留。如果不保留,后續就無法在用戶點擊時識別推送的參數,會丟失通知的點擊數據
    // return {
    //   // 省略其它修改的字段,wantAgent建議還是使用getRemoteNotificationContent方法構造的參數。
    //   wantAgent: result.wantAgent
    // }
    // ************* 通知擴展消息處理 end *************
  }
}

pushService.receiveMessage接收通知擴展消息的處理代碼示例如下:

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {

    // ************* 初始化SDK begin *************
    aliyunPush.init({
      appKey: '請填入在準備工作中查詢的應用AppKey',
      appSecret: '請填入在準備工作中查詢的應用AppSecret',
      context: this.context,
    })
    // ************* 初始化SDK end *************

    // 省略其它初始化配置方法

    // ************* 設置應用在前臺時鴻蒙廠商通道的通知擴展消息接收接口 begin *************
    pushService.receiveMessage("IM", this, async (data: pushCommon.PushPayload) => {
      // 解析推送參數
      const extensionNotification: ExtensionNotification = await aliyunPush.parseExtensionPushData(data);
      // 這里根據獲取的通知擴展消息參數進行業務處理
    })
    // ************* 設置應用在前臺時鴻蒙廠商通道的通知擴展消息接收接口 end *************
  }
  // 省略其它代碼
}

關于RemoteNotificationExtensionAbility和pushService.receiveMessage的改動請參考通知擴展消息的開發步驟說明。

關于如何使用阿里云推送平臺推送通知擴展消息,請參考通知擴展消息

第八步:發起推送

通過控制臺的推送通知推送消息或者OpenAPI的推送相關接口,使用按設備推送,即可發起推送,SDK在接收到推送之后,會回調第三步:設置推送回調接口中設置的回調接口。

對于推送的通知,SDK在接收到之后,會回調onReceiveNotification方法,告知應用收到通知。SDK創建并發布通知之后,會回調onShowNotification方法,告知應用通知已發布。

對于推送的消息,SDK在接收到之后,會回調onReceiveMessage方法,告知應用收到消息。

關于合規使用和延遲初始化

SDK使用的權限如下:

權限名稱

權限說明

使用目的

權限申請時機

ohos.permission.INTERNET

允許使用Internet網絡

在建立推送通道時,用于訪問網絡數據

安裝應用時,系統自動授權

ohos.permission.GET_NETWORK_INFO

允許應用獲取數據網絡信息

在管理推送通道時,用于監聽網絡變化,在網絡恢復時,即時恢復推送通道

安裝應用時,系統自動授權

以上權限由系統在安裝時自動授權,所以SDK并不需要主動向用戶申請權限。

對于通知授權,請參考請求通知授權實現應用請求授權邏輯,SDK默認不會向用戶申請通知授權。

對于SDK信息及隱私政策,請參考SDK信息

在用戶同意使用SDK及同意通知授權之前,應用需要考慮延遲初始化SDK,我們的建議如下:

示例代碼請參考SDK接入完整代碼示例

SDK接入完整代碼示例

為了方便理解SDK接入過程中的代碼執行順序,請參考以下代碼:

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import {
  aliyunPush,
  Channel,
  ExtensionNotification,
  IPushListener,
  PushDataType,
  PushMessage,
  PushNotification,
  PushNotificationHandler
} from '@aliyun/push';
import { pushCommon, pushService } from '@kit.PushKit';
import { hilog } from '@kit.PerformanceAnalysisKit';

/**
 * 自定義的推送回調接口實現
 */
class MyPushListener implements IPushListener {
  onReceiveNotification(data: PushNotification | ExtensionNotification): boolean {
    if (data.type === PushDataType.Notification) {
      // 處理推送通知
    } else if (data.type === PushDataType.ExtensionNotification) {
      // 處理通知擴展消息
    }
    return false;
  }

  onShowNotification(data: PushNotification | ExtensionNotification): void {
    // 處理通知展示事件
  }

  onReceiveMessage(data: PushMessage): void {
    // 處理推送消息
  }
}

/**
 * 自定義推送數據的處理類
 */
class MyPushNotificationHandler implements PushNotificationHandler {
  onClickNotification(data: PushNotification | PushMessage | ExtensionNotification, from: Channel): void {
    // 由用戶點擊通知拉起的頁面,獲取推送數據,處理業務邏輯
  }

  noPushData(): void {
    // 不是由用戶點擊通知拉的頁面, 或者不是阿里云推送的數據
  }
}

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {

    // ************* 初始化SDK begin *************
    aliyunPush.init({
      appKey: '請填入在準備工作中查詢的應用AppKey',
      appSecret: '請填入在準備工作中查詢的應用AppSecret',
      context: this.context,
    })
    // ************* 初始化SDK end *************

    // ************* 設置推送回調接口 begin *************
    aliyunPush.setPushListener(new MyPushListener());
    // ************* 設置推送回調接口 end *************

    // ************* 調用推送通知點擊處理接口 begin *************
    aliyunPush.handleClickNotification(want, new MyPushNotificationHandler())
    // ************* 調用推送通知點擊處理接口 end *************

    // 這里需要應用獲取用戶是否已經同意使用SDK的標記
    const userAgreed = false;
    if(userAgreed) {
      // 用戶同意使用再初始化注冊推送
      this.registerPush();
    }

    // ************* 設置應用在前臺時鴻蒙廠商通道的通知擴展消息接收接口 begin *************
    pushService.receiveMessage("IM", this, async (data: pushCommon.PushPayload) => {
      // 解析推送參數
      const extensionNotification: ExtensionNotification = await aliyunPush.parseExtensionPushData(data);
      // 這里根據獲取的通知擴展消息參數進行業務處理
    })
    // ************* 設置應用在前臺時鴻蒙廠商通道的通知擴展消息接收接口 end *************
  }

  /**
   * 此方法可以延遲到用戶同意使用SDK之后再執行
   */
  private async registerPush() {
    // ************* 注冊設備獲取設備ID begin *************
    await aliyunPush.register();
    const deviceId = aliyunPush.getDeviceId();
    // ************* 注冊設備獲取設備ID end *************

    const pushToken = await pushService.getToken();
    // ************* 注冊鴻蒙PushToken begin *************
    await aliyunPush.registerThirdToken(pushToken);
    // ************* 注冊鴻蒙PushToken end *************
  }

  onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // ************* 調用推送通知點擊處理接口 begin *************
    aliyunPush.handleClickNotification(want, new MyPushNotificationHandler())
    // ************* 調用推送通知點擊處理接口 end *************
  }

  // 省略其它代碼

  onDestroy(): void {
  }

  onWindowStageCreate(windowStage: window.WindowStage): void {
    // Main window is created, set main page for this ability

    windowStage.loadContent('pages/Index', (err) => {
      if (err.code) {
        return;
      }
    });
  }

  onWindowStageDestroy(): void {
    // Main window is destroyed, release UI related resources
  }

  onForeground(): void {
    // Ability has brought to foreground
  }

  onBackground(): void {
    // Ability has back to background
  }
}

后續步驟

如果要通過別名、標簽等方式推送,或者定制通知的樣式等等功能,可以參考HarmonyOS SDK API