0

プッシュ通知が必要な appcelerator Alloy フレームワークを使用してアプリを作成しています。初めてプッシュ通知を使用するので、ご容赦ください。

ここのプッシュ通知 wiki チュートリアルに従いましたhttps://wiki.appcelerator.org/display/guides2/Push+Notifications

これは私のコードです:

var deviceToken = null;

// Check if the device is running iOS 8 or later
if (Ti.Platform.name == "iPhone OS" && parseInt(Ti.Platform.version.split(".")[0]) >= 8) {

    // Wait for user settings to be registered before registering for push notifications
    Ti.App.iOS.addEventListener('usernotificationsettings', function registerForPush() {

        // Remove event listener once registered for push notifications
        Ti.App.iOS.removeEventListener('usernotificationsettings', registerForPush); 

        Ti.Network.registerForPushNotifications({
            success: deviceTokenSuccess,
            error: deviceTokenError,
            callback: receivePush
        });
    });

    // Register notification types to use
    Ti.App.iOS.registerUserNotificationSettings({
        types: [
            Ti.App.iOS.USER_NOTIFICATION_TYPE_ALERT,
            Ti.App.iOS.USER_NOTIFICATION_TYPE_SOUND,
            Ti.App.iOS.USER_NOTIFICATION_TYPE_BADGE
        ]
    });
}

// For iOS 7 and earlier
else {

    Ti.Network.registerForPushNotifications({
        // Specifies which notifications to receive
        types: [
            Ti.Network.NOTIFICATION_TYPE_BADGE,
            Ti.Network.NOTIFICATION_TYPE_ALERT,
            Ti.Network.NOTIFICATION_TYPE_SOUND
        ],
        success: deviceTokenSuccess,
        error: deviceTokenError,
        callback: receivePush
    });
}

// Process incoming push notifications
function receivePush(e) {
    alert('Received push: ' + JSON.stringify(e));
}
// Save the device token for subsequent API calls
function deviceTokenSuccess(e) {
    deviceToken = e.deviceToken;
}

function deviceTokenError(e) {
    alert('Failed to register for push notifications! ' + e.error);
}


// Require the Cloud module
var Cloud = require("ti.cloud");

function subscribeToChannel () {
    // Subscribes the device to the 'chats' channel
    // Specify the push type as either 'android' for Android or 'ios' for iOS
    Cloud.PushNotifications.subscribeToken({
        device_token: deviceToken,
        channel:'test',
        type: Ti.Platform.name == 'android' ? 'android' : 'ios'
    }, function (e) {
        if (e.success) {
            alert('Subscribed');
        } else {
            alert('Error:\n' + ((e.error && e.message) || JSON.stringify(e)));
        }
    });
}



function unsubscribeToChannel () {
    // Unsubscribes the device from the 'test' channel
    Cloud.PushNotifications.unsubscribeToken({
        device_token: deviceToken,
        channel:'test',
    }, function (e) {
        if (e.success) {
            alert('Unsubscribed');
        } else {
            alert('Error:\n' + ((e.error && e.message) || JSON.stringify(e)));
        }
    });
}



function loginUser(username, password){
    // Log in to Arrow
    Cloud.Users.login({
        login: username,
        password: password
    }, function (e) {
        if (e.success) {
            subscribeToChannel ();
            alert('Login successful with device token' + deviceToken);

            // Store the authentication details in the local filesystem
            Ti.App.Properties.setString('usernameSave',username);
            Ti.App.Properties.setString('passwordSave',password);

            // user_id = jsonPost.SuccessResult.user_id;

        } else {
            alert('Error:\n' +
                ((e.error && e.message) || JSON.stringify(e)));
        }
    });
}



var savedUserName = Ti.App.Properties.getString('usernameSave','');
var savedPassword = Ti.App.Properties.getString('passwordSave','');
if(savedUserName != ''){
    $.userNameField.value = savedUserName;
    $.passwordField.value = savedPassword;
}

function login(){
    var username = $.userNameField.value;
    var password = $.passwordField.value;

    loginUser(username, password);
}

Login() 関数は、login という名前のボタンがクリックされると呼び出されます。

ログイン時に、期待どおりにLogin SuccessfulアラートとSubscribedアラートが表示されます。

すべてのユーザーにプッシュ通知を送信しようとすると、常に機能しました。しかし、指定したユーザーに送信しようとすると、ダッシュボードのプッシュ ログでエラーが発生します。

ここで何が欠けていますか?私を助けてください。

ありがとう。

4

1 に答える 1

1

わかりました、これを引き起こしている問題を見つけました。

チャンネル サブスクリプションの代わりにトークン サブスクリプションを使用しているサブスクリプション メソッドのように、それは私のせいでした。セッションベースの方法を使用しているため。

将来誰かがそれを必要とする場合、ここに違いがあります。

2 行目を確認してください...

前のコード

function subscribeToChannel () {

    Cloud.PushNotifications.subscribeToken({
        device_token: deviceToken,
        channel:'test',
        type: Ti.Platform.name == 'android' ? 'android' : 'ios'
    }, function (e) {
        if (e.success) {
            alert('Subscribed');
        } else {
            alert('Error:\n' + ((e.error && e.message) || JSON.stringify(e)));
        }
    });
}

新しいコード

function subscribeToChannel(){

    Cloud.PushNotifications.subscribe({
        device_token: deviceToken,
        channel: 'test',
        type: Ti.Platform.name == 'android' ? 'android' : 'ios'
    }, function (e) {
        if (e.success) {
            alert('Subscribed');
        } else {

            alert('Error:\n' + ((e.error && e.message) || JSON.stringify(e)));
        }
    });
}

ありがとうございました。

乾杯。

于 2015-12-28T18:00:58.173 に答える